<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <link rel="STYLESHEET" href="modpython.css" type='text/css' /> <link rel="first" href="modpython.html" title='Mod_python Manual' /> <link rel='contents' href='contents.html' title="Contents" /> <link rel='index' href='genindex.html' title='Index' /> <link rel='last' href='about.html' title='About this document...' /> <link rel='help' href='about.html' title='About this document...' /> <link rel="next" href="ssi-conditionals.html" /> <link rel="prev" href="ssi-data-scope.html" /> <link rel="parent" href="ssi.html" /> <link rel="next" href="ssi-conditionals.html" /> <meta name='aesop' content='information' /> <title>6.4 Pre-propulating Globals</title> </head> <body> <DIV CLASS="navigation"> <div id='top-navigation-panel' xml:id='top-navigation-panel'> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="6.3 Scope of Global" href="ssi-data-scope.html"><img src='previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="6. Server Side Includes" href="ssi.html"><img src='up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="6.5 Conditional Expressions" href="ssi-conditionals.html"><img src='next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Mod_python Manual</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" href="contents.html"><img src='contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><img src='blank.png' border='0' height='32' alt='' width='32' /></td> <td class='online-navigation'><a rel="index" title="Index" href="genindex.html"><img src='index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="ssi-data-scope.html">6.3 Scope of Global</A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="ssi.html">6. Server Side Includes</A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="ssi-conditionals.html">6.5 Conditional Expressions</A> </div> <hr /></div> </DIV> <!--End of Navigation Panel--> <H1><A NAME="SECTION008400000000000000000"></A><A NAME="ssi-globals"></A> <BR> 6.4 Pre-propulating Globals </H1> <P> Any Python code which appears within the page has to be compiled each time the page is accessed before it is executed. In other words, the compiled code is not cached between requests. To limit such recompilation and to avoid duplication of common code amongst many pages, it is preferable to pre-populate the global data from within a mod_python handler prior to the page being processed. <P> In most cases, a fixup handler would be used for this purpose. For this to work, first need to configure Apache so that it knows to call the fixup handler. <P> <div class="verbatim"><pre> PythonFixupHandler _handlers </pre></div> <P> The implementation of the fixup handler contained in <code>_handlers.py</code> then needs to create an instance of a Python dictionary, store that in the mod_python request object as <code>ssi_globals</code> and then populate that dictionary with any data to be available to the Python code executing within the page. <P> <div class="verbatim"><pre> from mod_python import apache import cgi, time def _escape(object): return cgi.escape(str(object)) def _header(filter): print >> filter, '...' def _footer(filter): print >> filter, '...' def fixuphandler(req): req.ssi_globals = {} req.ssi_globals['time'] = time req.ssi_globals['_escape'] = _escape req.ssi_globals['_header'] = _header req.ssi_globals['_footer'] = _footer return apache.OK </pre></div> <P> This is most useful where it is necessary to insert common information such as headers, footers or menu panes which are dynamically generated into many pages. <P> <div class="verbatim"><pre> <!--#python exec=" now = time.time() " --> <html> <body> <!--#python exec="_header(filter)" --> <pre> <!--#python eval="_escape(time.asctime(time.localtime(now)))"--> </pre> <!--#python exec="_footer(filter)" --> </body> </html> </pre></div> <P> <DIV CLASS="navigation"> <div class='online-navigation'> <p></p><hr /> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="6.3 Scope of Global" href="ssi-data-scope.html"><img src='previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="6. Server Side Includes" href="ssi.html"><img src='up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="6.5 Conditional Expressions" href="ssi-conditionals.html"><img src='next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Mod_python Manual</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" href="contents.html"><img src='contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><img src='blank.png' border='0' height='32' alt='' width='32' /></td> <td class='online-navigation'><a rel="index" title="Index" href="genindex.html"><img src='index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="ssi-data-scope.html">6.3 Scope of Global</A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="ssi.html">6. Server Side Includes</A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="ssi-conditionals.html">6.5 Conditional Expressions</A> </div> </div> <hr /> <span class="release-info">Release 3.3.1, documentation updated on January 29, 2007.</span> </DIV> <!--End of Navigation Panel--> </BODY> </HTML>