[Repoze-checkins] r1369 - repoze.bfg/trunk/docs/narr

Paul Everitt paul at agendaless.com
Fri Jul 18 09:45:49 EDT 2008


Author: Paul Everitt <paul at agendaless.com>
Date: Fri Jul 18 09:45:49 2008
New Revision: 1369

Log:
Expanded the docs on ZPT and XSLT.


Modified:
   repoze.bfg/trunk/docs/narr/templates.rst

Modified: repoze.bfg/trunk/docs/narr/templates.rst
==============================================================================
--- repoze.bfg/trunk/docs/narr/templates.rst	(original)
+++ repoze.bfg/trunk/docs/narr/templates.rst	Fri Jul 18 09:45:49 2008
@@ -5,31 +5,63 @@
 provided by a *view* in a form that is meaningful for a particular
 *context*.
 
-The ``repoze.bfg`` Default Templating Systems
----------------------------------------------
+Default Templating With z3c.pt Page Templates
+------------------------------------------------
 
-``repoze.bfg`` uses the `z3c.pt
-<http://pypi.python.org/pypi/z3c.pt>`_
-templating engine as its default
-engine.  This templating engine
-complies with the `Zope Page
-Template
-<http://wiki.zope.org/ZPT/FrontPage>`_
-template specification.
-
-``repoze.bfg`` also allows `XSL
-Templates
-<http://www.w3.org/TR/xslt>`_
-to be used for templating.
-
-
-Rendering a ``z3c.pt`` Template
--------------------------------
-
-Given a template named ``foo.html``
-in a directory in your application
-named "templates", you can render
-the template in a view via::
+Like Zope, ``repoze.bfg`` uses Zope Page Templates (ZPT) as its default
+templating language. However, ``repoze.bfg`` uses a different
+implementation of the ZPT specification: the `z3c.pt
+<http://pypi.python.org/pypi/z3c.pt>`_ templating engine. This
+templating engine complies with the `Zope Page Template
+<http://wiki.zope.org/ZPT/FrontPage>`_ template specification. While
+``z3c.pt`` doesn't implement the METAL specification (feature or
+drawback, depending on your viewpoint,) it is significantly faster. And
+faster, of course, is the zen of ``repoze.bfg``.
 
-  from repoze.bfg.template import render template
+Given a template named ``foo.html`` in a directory in your application
+named "templates", you can render the template in a view via::
+
+  from repoze.bfg.template import render_template
   render_template('templates/foo.html', foo=1, bar=2)
+
+You can also wire up page templates via ZCML::
+
+.. code-block:: xml
+
+  <bfg:view
+      for=".models.IMapping"
+      factory=".views.contents_view"
+      name="contents.html"
+      />
+
+Both approaches load the template and keep it in memory between
+requests. This means that modifications to the ZPT require a restart
+before you can see the changes.
+
+Templating with XSLT
+------------------------
+
+``repoze.bfg`` also supports XSLT as an optional templating language.
+Like ZPT, an XSLT template is loaded once and re-used between requests.
+
+Given a template ``foo.xsl`` in the templates directory, you can render
+an XSLT as follows::
+
+  from repoze.bfg.template import render_transform
+  from lxml import etree
+  node = etree.Element("root")  
+  render_transform('templates/foo.xsl', node)
+
+As shown, the second argument to ``render_transform`` is the element
+(and children) that you want as the top of the data for the XSLT.
+
+You can also pass XSLT parameters in as keyword arguments::
+
+  from repoze.bfg.template import render_transform
+  from lxml import etree
+  node = etree.Element("root")
+  value1 = "'app1'"
+  render_transform('templates/foo.xsl', node, param1=value1)
+
+This would then assign 'app1' as the value of an ``<xsl:param
+name="param1"/>`` parameter in the XSLT template.


More information about the Repoze-checkins mailing list