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.
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.
PythonFixupHandler _handlers
The implementation of the fixup handler contained in _handlers.py
then needs to create an instance of a Python dictionary, store that in the
mod_python request object as ssi_globals
and then populate that
dictionary with any data to be available to the Python code executing
within the page.
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
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.
<!--#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>