<?xml version="1.0" encoding="ascii"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>genshi.template.directives.DefDirective</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Home link --> <th> <a href="genshi-module.html">Home</a> </th> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <!-- Project homepage --> <th class="navbar" align="right" width="100%"> <table border="0" cellpadding="0" cellspacing="0"> <tr><th class="navbar" align="center" ><a class="navbar" target="_top" href="../index.html">Documentation Index</a></th> </tr></table></th> </tr> </table> <table width="100%" cellpadding="0" cellspacing="0"> <tr valign="top"> <td width="100%"> <span class="breadcrumbs"> <a href="genshi-module.html">Package genshi</a> :: <a href="genshi.template-module.html">Package template</a> :: <a href="genshi.template.directives-module.html">Module directives</a> :: Class DefDirective </span> </td> <td> <table cellpadding="0" cellspacing="0"> <!-- hide/show private --> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> <h1 class="epydoc">Class DefDirective</h1><p class="nomargin-top"></p> <pre class="base-tree"> object --+ | Directive --+ | <strong class="uidshort">DefDirective</strong> </pre> <hr /> <p>Implementation of the <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutils literal">py:def</tt> template directive.</p> <p>This directive can be used to create "Named Template Functions", which are template snippets that are not actually output during normal processing, but rather can be expanded from expressions in other places in the template.</p> <p>A named template function can be used just like a normal Python function from template expressions:</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">from</span> genshi.template <span class="py-keyword">import</span> MarkupTemplate <span class="py-prompt">>>> </span>tmpl = MarkupTemplate(<span class="py-string">'''<div xmlns:py="http://genshi.edgewall.org/"></span> <span class="py-more">... </span><span class="py-string"> <p py:def="echo(greeting, name='world')" class="message"></span> <span class="py-more">... </span><span class="py-string"> ${greeting}, ${name}!</span> <span class="py-more">... </span><span class="py-string"> </p></span> <span class="py-more">... </span><span class="py-string"> ${echo('Hi', name='you')}</span> <span class="py-more">... </span><span class="py-string"></div>'''</span>) <span class="py-prompt">>>> </span><span class="py-keyword">print</span>(tmpl.generate(bar=<span class="py-string">'Bye'</span>)) <span class="py-output"><div></span> <span class="py-output"> <p class="message"></span> <span class="py-output"> Hi, you!</span> <span class="py-output"> </p></span> <span class="py-output"></div></span></pre> <p>If a function does not require parameters, the parenthesis can be omitted in the definition:</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span>tmpl = MarkupTemplate(<span class="py-string">'''<div xmlns:py="http://genshi.edgewall.org/"></span> <span class="py-more">... </span><span class="py-string"> <p py:def="helloworld" class="message"></span> <span class="py-more">... </span><span class="py-string"> Hello, world!</span> <span class="py-more">... </span><span class="py-string"> </p></span> <span class="py-more">... </span><span class="py-string"> ${helloworld()}</span> <span class="py-more">... </span><span class="py-string"></div>'''</span>) <span class="py-prompt">>>> </span><span class="py-keyword">print</span>(tmpl.generate(bar=<span class="py-string">'Bye'</span>)) <span class="py-output"><div></span> <span class="py-output"> <p class="message"></span> <span class="py-output"> Hello, world!</span> <span class="py-output"> </p></span> <span class="py-output"></div></span></pre> <!-- ==================== NESTED CLASSES ==================== --> <a name="section-NestedClasses"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Nested Classes</span></td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>Directive</code></b>: <code><a href="genshi.template.directives.DirectiveMeta-class.html">__metaclass__</a></code> </p> </td> </tr> </table> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Instance Methods</span></td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="genshi.template.directives.DefDirective-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">args</span>, <span class="summary-sig-arg">template</span>, <span class="summary-sig-arg">namespaces</span>=<span class="summary-sig-default">None</span>, <span class="summary-sig-arg">lineno</span>=<span class="summary-sig-default">-1</span>, <span class="summary-sig-arg">offset</span>=<span class="summary-sig-default">-1</span>)</span><br /> x.__init__(...) initializes x; see help(type(x)) for signature</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="genshi.template.directives.DefDirective-class.html#__call__" class="summary-sig-name">__call__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">stream</span>, <span class="summary-sig-arg">directives</span>, <span class="summary-sig-arg">ctxt</span>, <span class="summary-sig-arg">**vars</span>)</span><br /> Apply the directive to the given stream.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="genshi.template.directives.DefDirective-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br /> repr(x)</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__delattr__</code>, <code>__format__</code>, <code>__getattribute__</code>, <code>__hash__</code>, <code>__new__</code>, <code>__reduce__</code>, <code>__reduce_ex__</code>, <code>__setattr__</code>, <code>__sizeof__</code>, <code>__str__</code>, <code>__subclasshook__</code> </p> </td> </tr> </table> <!-- ==================== CLASS METHODS ==================== --> <a name="section-ClassMethods"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Class Methods</span></td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="genshi.template.directives.DefDirective-class.html#attach" class="summary-sig-name">attach</a>(<span class="summary-sig-arg">cls</span>, <span class="summary-sig-arg">template</span>, <span class="summary-sig-arg">stream</span>, <span class="summary-sig-arg">value</span>, <span class="summary-sig-arg">namespaces</span>, <span class="summary-sig-arg">pos</span>)</span><br /> Called after the template stream has been completely parsed.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> </table> <!-- ==================== CLASS VARIABLES ==================== --> <a name="section-ClassVariables"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Class Variables</span></td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="tagname"></a><span class="summary-name">tagname</span> = <code title="'def'"><code class="variable-quote">'</code><code class="variable-string">def</code><code class="variable-quote">'</code></code> </td> </tr> </table> <!-- ==================== PROPERTIES ==================== --> <a name="section-Properties"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Properties</span></td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="args"></a><span class="summary-name">args</span> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="defaults"></a><span class="summary-name">defaults</span> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="dstar_args"></a><span class="summary-name">dstar_args</span> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="name"></a><span class="summary-name">name</span> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="star_args"></a><span class="summary-name">star_args</span> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>Directive</code></b>: <code>expr</code> </p> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__class__</code> </p> </td> </tr> </table> <!-- ==================== METHOD DETAILS ==================== --> <a name="section-MethodDetails"></a> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td align="left" colspan="2" class="table-header"> <span class="table-header">Method Details</span></td> </tr> </table> <a name="__init__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, <span class="sig-arg">args</span>, <span class="sig-arg">template</span>, <span class="sig-arg">namespaces</span>=<span class="sig-default">None</span>, <span class="sig-arg">lineno</span>=<span class="sig-default">-1</span>, <span class="sig-arg">offset</span>=<span class="sig-default">-1</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" > </td> </tr></table> x.__init__(...) initializes x; see help(type(x)) for signature <dl class="fields"> <dt>Overrides: object.__init__ <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <a name="attach"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">attach</span>(<span class="sig-arg">cls</span>, <span class="sig-arg">template</span>, <span class="sig-arg">stream</span>, <span class="sig-arg">value</span>, <span class="sig-arg">namespaces</span>, <span class="sig-arg">pos</span>)</span> <br /><em class="fname">Class Method</em> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>Called after the template stream has been completely parsed.</p> <p>This class method should return a <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutils literal">(directive, stream)</tt> tuple. If <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutils literal">directive</tt> is not <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutils literal">None</tt>, it should be an instance of the Directive class, and gets added to the list of directives applied to the substream at runtime. <code class="link">stream</code> is an event stream that replaces the original stream associated with the directive.</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>template</code></strong> - the <a href="genshi.template.base.Template-class.html" class="link">Template</a> object</li> <li><strong class="pname"><code>stream</code></strong> - the event stream associated with the directive</li> <li><strong class="pname"><code>value</code></strong> - the argument value for the directive; if the directive was specified as an element, this will be an <a href="genshi.core.Attrs-class.html" class="link">Attrs</a> instance with all specified attributes, otherwise it will be a <code class="link">unicode</code> object with just the attribute value</li> <li><strong class="pname"><code>namespaces</code></strong> - a mapping of namespace URIs to prefixes</li> <li><strong class="pname"><code>pos</code></strong> - a <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutils literal">(filename, lineno, offset)</tt> tuple describing the location where the directive was found in the source</li> </ul></dd> <dt>Overrides: Directive.attach <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <a name="__call__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__call__</span>(<span class="sig-arg">self</span>, <span class="sig-arg">stream</span>, <span class="sig-arg">directives</span>, <span class="sig-arg">ctxt</span>, <span class="sig-arg">**vars</span>)</span> <br /><em class="fname">(Call operator)</em> </h3> </td><td align="right" valign="top" > </td> </tr></table> Apply the directive to the given stream. <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>stream</code></strong> - the event stream</li> <li><strong class="pname"><code>directives</code></strong> - a list of the remaining directives that should process the stream</li> <li><strong class="pname"><code>ctxt</code></strong> - the context data</li> <li><strong class="pname"><code>vars</code></strong> - additional variables that should be made available when Python code is executed</li> </ul></dd> <dt>Overrides: Directive.__call__ <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <a name="__repr__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span> <br /><em class="fname">(Representation operator)</em> </h3> </td><td align="right" valign="top" > </td> </tr></table> repr(x) <dl class="fields"> <dt>Overrides: object.__repr__ <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <br /> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Home link --> <th> <a href="genshi-module.html">Home</a> </th> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <!-- Project homepage --> <th class="navbar" align="right" width="100%"> <table border="0" cellpadding="0" cellspacing="0"> <tr><th class="navbar" align="center" ><a class="navbar" target="_top" href="../index.html">Documentation Index</a></th> </tr></table></th> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> Generated by Epydoc 3.0.1 on Sun Jan 27 18:17:20 2013 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" >http://epydoc.sourceforge.net</a> </td> </tr> </table> <script type="text/javascript"> <!-- // Private objects are initially displayed (because if // javascript is turned off then we want them to be // visible); but by default, we want to hide them. So hide // them unless we have a cookie that says to show them. checkCookie(); // --> </script> </body> </html>