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.
Axa Assurance Maroc - Insurer Innovation Award 2024
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