Edgewall Software

Changes between Initial Version and Version 1 of GenshiRecipes/PyExtendsEquivalent


Ignore:
Timestamp:
Jul 16, 2006, 3:03:54 PM (18 years ago)
Author:
cmlenz
Comment:

Add recipe that shows how to translate py:extends to includes

Legend:

Unmodified
Added
Removed
Modified
  • GenshiRecipes/PyExtendsEquivalent

    v1 v1  
     1= Replacing `py:extends` with Includes =
     2
     3As noted in MarkupVsKid, Markup does not support the `py:extends` directives for template reuse.
     4
     5This page shows how the [http://www.kid-templating.org/language.html#template-reuse-py-extends example] from the Kid language specification translates to a functionally equivalent setup in Markup:
     6
     7Assume the following base template, stored as `base.html`:
     8
     9{{{
     10#!xml
     11<html xmlns:py="http://markup.edgewall.org/" py:strip="">
     12
     13  <ul py:def="display_errors(errors)">
     14    <li py:for="error in errors" py:content="error" />
     15  </ul>
     16
     17  <strong py:match="b" py:content="select('text()')" />
     18
     19</html>
     20}}}
     21
     22And the following template “extending” that base template, stored as `page.html`:
     23
     24{{{
     25#!xml
     26<html xmlns:py="http://markup.edgewall.org/"
     27      xmlns:xi="http://www.w3.org/2001/XInclude">
     28  <xi:include href="base.html" />
     29  <head>
     30    <title>Errors</title>
     31  </head>
     32  <body>
     33    <p>The following <b>errors</b> were found:</p>
     34    ${display_errors(["Field is required", "Must be phone number.."])}
     35  </body>
     36</html>
     37}}}
     38
     39The “trick” here is that the base template is included at the top of the page template. This results in the template function `display_errors()` being available to the page template, and the match template being applied to the output generated by the page template.
     40
     41When rendered, these will produce the following output:
     42
     43{{{
     44#!xml
     45<html>
     46  <head>
     47    <title>Errors</title>
     48  </head>
     49  <body>
     50    <p>The following <strong>errors</strong> were found:</p>
     51    <ul>
     52      <li>Field is required</li><li>Must be phone number..</li>
     53    </ul>
     54  </body>
     55</html>
     56}}}
     57
     58----
     59See also: MarkupRecipes/PyLayoutEquivalent, MarkupVsKid, MarkupTemplates