Skip to main content

Zope Page Templates

Project description

Page Templates provide an elegant templating mechanism that achieves a
clean separation of presentation and application logic while allowing
for designers to work with templates in their visual editing tools
(FrontPage, Dreamweaver, GoLive, etc.).


Detailed Documentation
----------------------

=====================================
ZPT (Zope Page-Template) Architecture
=====================================

There are a number of major components that make up the page-template
architecture:

- The TAL *compiler* and *interpreter*. This is responsible for
compiling source files and for executing compiled templates. See
the `zope.tal` package for more information.

- An *expression engine* is responsible for compiling expressions and
for creating expression execution contexts. It is common for
applications to override expression engines to provide custom
expression support or to change the way expressions are implemented.
The `zope.app.pagetemplate` package uses this to implement trusted
and untrusted evaluation; a different engine is used for each, with
different implementations of the same type of expressions.

Expression contexts support execution of expressions and provide
APIs for setting up variable scopes and setting variables. The
expression contexts are passed to the TAL interpreter at execution
time.

The most commonly used expression implementation is that found in
`zope.tales`.

- Page templates tie everything together. They assemble an expression
engine with the TAL interpreter and orchestrate management of source
and compiled template data. See `zope.pagetemplate.interfaces`.




==============
Page Templates
==============

Introduction
------------

Page Templates provide an elegant templating mechanism that achieves a
clean separation of presentation and application logic while allowing
for designers to work with templates in their visual editing tools
(FrontPage, Dreamweaver, GoLive, etc.).

This document focuses on usage of Page Templates outside of a Zope
context, it does *not* explain how to write page templates as there
are several resources on the web which do so.

Simple Usage
------------

Using Page Templates outside of Zope3 is very easy and straight
forward. A quick example::

>>> from zope.pagetemplate.pagetemplatefile import PageTemplateFile
>>> my_pt = PageTemplateFile('hello_world.pt')
>>> my_pt()
u'<html><body>Hello World</body></html>'

Subclassing PageTemplates
-------------------------

Lets say we want to alter page templates such that keyword arguments
appear as top level items in the namespace. We can subclass
`PageTemplate` and alter the default behavior of `pt_getContext()` to
add them in::

from zope.pagetemplate.pagetemplate import PageTemplate

class mypt(PageTemplate):
def pt_getContext(self, args=(), options={}, **kw):
rval = PageTemplate.pt_getContext(self, args=args)
options.update(rval)
return options

class foo:
def getContents(self): return 'hi'

So now we can bind objects in a more arbitrary fashion, like the
following::

template = """
<html>
<body>
<b tal:replace="das_object/getContents">Good Stuff Here</b>
</body>
</html>
"""

pt = mypt()
pt.write(template)
pt(das_object=foo())

See `interfaces.py`.


=======
CHANGES
=======

4.0.2 (2013-02-22)
------------------

- Migrated from zope.security.untrustedpython to zope.untrustedpython.

- Made zope.untrustedpython an extra dependency. Without it, python
expressions are not protected, even though path expressions are still
security wrapped.

- Added support for Python 3.3.

4.0.1 (2012-01-23)
------------------

- LP#732972: PageTemplateTracebackSupplement no longer passes
``check_macro_expansion=False`` to old templates which do not
accept this argument.

4.0.0 (2012-12-13)
------------------

- Replaced deprecated ``zope.interface.classProvides`` usage with equivalent
``zope.interface.provider`` decorator.

- Replaced deprecated ``zope.interface.implements`` usage with equivalent
``zope.interface.implementer`` decorator.

- Dropped support for Python 2.4 and 2.5.

- PageTemplate.pt_render() has a new argument, check_macro_expansion,
defaulting to True.

- PageTemplateTracebackSupplement passes check_macro_expansion=False, to
avoid LP#732972.

3.6.3 (2011-09-21)
------------------

- Fixed test assertions to be compatible with zope.tal 3.6.

3.6.2 (2011-09-21)
------------------

- Change interface for engine and program such that the return type of
the ``cook`` method is a tuple ``(program, macros)``. This follows
the interface for the TAL parser's ``getCode`` method.

This fixes a legacy compatibility issue where code would expect an
``_v_macros`` volatile attribute which was missing.

3.6.1 (2011-08-23)
------------------

- Fixed issue with missing default value for ``strictinsert``.

3.6.0 (2011-08-20)
------------------

- Replaced StringIO stream class with a faster list-based implementation.

- Abstract out the template engine and program interfaces and allow
implementation replacement via a utility registration.

- Removed ancient copyright from test files (LP: #607228)

3.5.2 (2010-07-08)
------------------

- Fixed PTRuntimeError exception messages to be consistent across Python
versions, and compatibile with the output under Python 2.4. (More
readable than the previous output under Python 2.6 as well.)

3.5.1 (2010-04-30)
------------------

- Removed use of 'zope.testing.doctestunit' in favor of stdlib's doctest.

- Added dependency on "zope.security [untrustedpython]" because the 'engine'
module uses it.

3.5.0 (2009-05-25)
------------------

- Added test coverage reporting support.

- Moved 'engine' module and related test scaffolding here from
``zope.app.pagetemplate`` package.

3.4.2 (2009-03-17)
------------------

- Remove old zpkg-related DEPENDENCIES.cfg file.

- Change package's mailing list address to zope-dev at zope.org, as
zope3-dev at zope.org is now retired.

- Change `cheeseshop` to `pypi` in the packages' homepage url.

3.4.1 (2009-01-27)
------------------

- Fix test due to recent changes in zope.tal.


3.4.0 (2007-10-02)
------------------

- Initial release independent of the Zope 3 tree.


3.2.0 (2006-01-05)
------------------

- Corresponds to the version of the zope.pagetemplate package shipped
as part of the Zope 3.2.0 release.

- ZPTPage macro expansion: changed label text to match the corresponding
label in Zope 2 and activated the name spaces for macro expansion
in 'read'. See http://www.zope.org/Collectors/Zope3-dev/199

- Coding style cleanups.


3.1.0 (2005-10-03)
------------------

- Corresponds to the version of the zope.pagetemplate package shipped
as part of the Zope 3.1.0 release.

- Fixed apidoc and Cookie, which were using wrong descriptor class
(changed to 'property'). See http://www.zope.org/Collectors/Zope3-dev/387

- Documentation / style / testing cleanups.


3.0.0 (2004-11-07)
------------------

- Corresponds to the version of the zope.pagetemplate package shipped
as part of the Zope X3.0.0 release.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zope.pagetemplate-4.0.2.zip (58.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page