Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 15533144ea879a3ee7f2cdcbb31e4859 > files > 132

apache-mod_python-doc-3.3.1-12mdv2010.0.i586.rpm

<!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 &gt;&gt; filter, '...'

def _footer(filter):
    print &gt;&gt; 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>
&lt;!--#python exec="
now = time.time()
" --&gt;
&lt;html&gt;
&lt;body&gt;
&lt;!--#python exec="_header(filter)" --&gt;
&lt;pre&gt;
&lt;!--#python eval="_escape(time.asctime(time.localtime(now)))"--&gt;
&lt;/pre&gt;
&lt;!--#python exec="_footer(filter)" --&gt;
&lt;/body&gt;
&lt;/html&gt;
</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>