[TransWarp] Template parsing and XML/HTML processing design

Phillip J. Eby pje at telecommunity.com
Sun Jul 20 21:19:51 EDT 2003

At 07:53 PM 7/20/03 +0200, Jean Jordaan wrote:

>I really like my Zope Page Templates --- they recently gave me a lot of
>joy customizing Roundup ( http://roundup.sf.net ) which has no Zope
>dependency and bundles ZPT. And TALES also makes writing Zope Formulator
>forms a joy. Is PEAK templates something different entirely? What do you
>think of ZPT?

I think that ZPT still embed code in a web page, and that there's a better 
alternative.  If you've seen PSO (pso.sf.net), Twisted's Woven, or even JSP 
taglibs (though that's a bit of a stretch), you'll have a better idea of 
what PWT (peak.web.templates) looks like.  Here's an example, straight from 
the test suite:

<h1 model="foo" view="text">Title Goes Here</h1>
<ul model="bar" view="list">
     <li pattern="listItem" view="text"></li>

'view' attributes identify the object factory used to create the tag, 
'model' attributes are a path to the data to be used, and 'pattern' 
attributes identify parameters that are supplied to the nearest containing 
'view', rather like a METAL macro slot (except that views are written in 
Python, rather than being templates, although I intend to make it possible 
to use a template as a view, too).  Views are looked up in a property 
namespace so you can configure access to arbitrary view components that 
your app (or anybody else) supplies.  Views can modify the property 
namespace for their contained tags, so that inside a view the meaning of 
view attributes can change.  For example, view="list" inside a 
view="myApp.form" might have a different meaning.

No code occurs in a PWT, because all you can reference are view names, 
model paths, and pattern names.  (And the paths are just paths, not path 
expressions.)  There's no place to put any other parameters; they have to 
be in the code that defines the views, or in configuration properties 
supplied by the skin.  The nice thing, though, is that code mostly executes 
at "compile time", with full access to its contained parse tree (and its 
parent nodes, for that matter).  Any contiguous portion of the tree that 
contains no dynamic elements is collapsed/coalesced to a single node, thus 
improving rendering speed.

Anyway, PWT is still a work in progress, as I just got them parsing and 
rendering this evening, with two simple views ("text" and "list").  It 
should be possible later to create various kinds of form view components 
and use them in a PWT.  I also look forward to creating "tab" views, 
breadcrumb views, menus, calendars, etc., and being able to use them just 
by naming them in the template.  And, skins can redefine what components 
the view names will map to, and the view components in a template have 
access to the "current" skin at compile time.  (Templates are compiled for 
each skin, even if only defined in one, so that they have compile-time 
access to all skin configuration data.)

More information about the PEAK mailing list