This document discusses Zope Page Templates (ZPT), which is an implementation of the Template Attribute Language (TAL). ZPT allows separating presentation from logic by using XML/TAL data and templates to generate XHTML or other formats. Some key features of TAL mentioned include making well-formed XHTML easy, optional tag omission, conditional inclusion, and internationalization support. The document provides examples of basic template usage and more advanced features like macros.
Driving Behavioral Change for Information Management through Data-Driven Gree...
An introduction to Zope Page Templates and their use outside of Zope (+Audio)
1. Zope Page Templates
file:///home/pptfactory/temp/20090701114008/stencil.jpg
An introduction to Zope Page Templates
and their use outside of Zope
Matt Hamilton
matth@netsight.co.uk
30th June 2009 Europython 2009, Birmingham, UK 1
2. Who Am I
Technical Director of Netsight
Web development firm in Bristol, UK
10 years experience with Zope/Plone
More of an integrator than core developer
I get involved in all those sticky projects of merging
Plone in with other systems in an enterprise
30th June 2009 Europython 2009, Birmingham, UK 2
3. The Irony of this talk...
Most of it was taken from a talk
on PHPTAL!
Thanks to Kornel Lesiński who did a
file:///home/pptfactory/temp/20090701114008/kornel.jpg
talk on it at the Web Standards
conference 2008 in London
30th June 2009 Europython 2009, Birmingham, UK 3
4. What is ZPT/TAL
TAL – Template Attribute Language
ZPT – Zope Page Templates
ZPT = an implementation of TAL
30th June 2009 Europython 2009, Birmingham, UK 4
5. Zope?! I don't DO Zope!
file:///home/pptfactory/temp/20090701114008/2512086374_5da1610fc9.jpg
30th June 2009 Europython 2009, Birmingham, UK 5
6. TAL is a standard (sort of)
Official specification
http://wiki.zope.org/ZPT/TAL
Multiple implementations
http://en.wikipedia.org/wiki/Template_Attribute_Language
30th June 2009 Europython 2009, Birmingham, UK 6
7. The Idea of Templating
XML/TAL
Data
Template
ZPT
XHTML
30th June 2009 Europython 2009, Birmingham, UK 7
8. The Idea of Templating
XML/TAL
Data
Template
ZPT
or or not Plain
XHTML XML RSS
text
30th June 2009 Europython 2009, Birmingham, UK 8
9. Why use templates?
Separate Presentation and Logic
Keeping code clean
Multiple presentations of same data (RSS,
JSON, REST, XML)
30th June 2009 Europython 2009, Birmingham, UK 9
10. But, why TAL?
<ul>
% for name in row:
<li>${name}</li>
% endfor
</ul>
30th June 2009 Europython 2009, Birmingham, UK 10
11. But, why TAL?
<ul>
% for name in row:
<li>${name}</li>
% endfor
</ul>
<ul>
<li tal:repeat=”name row”
tal:content=”name” />
</ul>
30th June 2009 Europython 2009, Birmingham, UK 11
12. But, why TAL?
<ul>
<li tal:repeat=”name row”
tal:content=”name”>
Dummy data
</li>
</ul>
30th June 2009 Europython 2009, Birmingham, UK 12
13. But, why TAL?
<ul>
<li tal:repeat=”name row”
tal:content=”name”>
Dummy data
</li>
</ul>
30th June 2009 Europython 2009, Birmingham, UK 13
14. Makes well-formed XHTML
easy
<ul>
<li>
% if foo = 'bar':
${name}
</li> Nesting
% endif Error!
</ul>
30th June 2009 Europython 2009, Birmingham, UK 14
15. Makes well-formed XHTML
easy
<ul>
<li
tal:condition=”python:foo='bar'”
tal:content=”name” />
</ul>
30th June 2009 Europython 2009, Birmingham, UK 15
16. Makes well-formed XHTML
easy
Ensures that you close all elements
and quote attributes
Escapes all ampersands by default &
-> &
30th June 2009 Europython 2009, Birmingham, UK 16
17. So, how do I use it?
Create virtualenv
% virtualenv zptdemo
Install zope.pagetemplate in virtualenv
% cd zptdemo
% bin/easy_install zope.pagetemplate
30th June 2009 Europython 2009, Birmingham, UK 17
18. So, how do I use it?
In mycode.py:
from zope.pagetemplate.pagetemplatefile
import PageTemplateFile
my_pt = PageTemplateFile('mytemplate.pt')
context = {'row': ['apple',
'banana',
'carrot'],
'foo':'bar'}
print my_pt.pt_render(namespace=context)
30th June 2009 Europython 2009, Birmingham, UK 18
19. So, how do I use it?
In mytemplate.py:
<html>
<body>
<h1>Hello World</h1>
<div tal:condition=”python:foo == 'bar'”>
<ul>
<li tal:repeat="item rows" tal:content="item" />
</ul>
</div>
</body>
</html>
30th June 2009 Europython 2009, Birmingham, UK 19
20. So, how do I use it?
End result:
<html>
<body>
<h1>Hello World</h1>
<ul>
<li>apple</li>
<li>banana</li>
<li>carrot</li>
</ul>
</div>
</body>
</html>
30th June 2009 Europython 2009, Birmingham, UK 20
21. Some TAL niceties
<a href=”href” tal:omit-tag=”not:href”>
Optionally linked text
</a>
Omit the tag if there is href variable
evaluates false
30th June 2009 Europython 2009, Birmingham, UK 21
22. Some TAL niceties
<title tal:content=”page/title |
site/title | default”>
My Website
</title>
If there is no page title or site title,
then use the default text
30th June 2009 Europython 2009, Birmingham, UK 22
23. Some TAL niceties
<option tal:repeat=”c countries”
tal:content=”c”
tal:attributes=”selected
python:c==’UK’” />
Create an option for each country,
and if the UK then set selected
30th June 2009 Europython 2009, Birmingham, UK 23
24. Some advanced features
file:///home/pptfactory/temp/20090701114008/ninja.jpg
( but not too many )
30th June 2009 Europython 2009, Birmingham, UK 24
25. METAL macros
A master template:
<html metal:define-macro=”main”>
<head><title>My Site</title></head>
<body>
<div metal:define-slot=”body”>
Dummy body
</div>
</body>
</html>
30th June 2009 Europython 2009, Birmingham, UK 25
26. METAL macros
A sub-template for a page:
<html metal:use-macro=
”template/macros/main”>
<head><title>My Site</title></head>
<body>
<div metal:fill-slot=”body”>
This is my real body text
</div>
</body>
</html>
30th June 2009 Europython 2009, Birmingham, UK 26