Skip to main content

Zope Page Templates

Project description

zope.pagetemplate

Latest release Supported Python versions https://travis-ci.org/zopefoundation/zope.pagetemplate.png?branch=master https://coveralls.io/repos/github/zopefoundation/zope.pagetemplate/badge.svg?branch=master

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.

ZPT Usage

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.3.0 (2017-09-04)

  • Add support for Python 3.5 and 3.6.

  • Drop support for Python 2.6, 3.2 and 3.3.

  • Certain internal test support objects in the tests package were removed or modified.

  • The TraversableModuleImporter properly turns ImportError into TraversalError. Previously it was catching KeyError, which cannot be raised.

  • Reach 100% code coverage and maintain it through automated testing.

4.2.1 (2015-06-06)

  • Add support for Python 3.2.

4.2.0 (2015-06-02)

4.1.0 (2014-12-27)

  • Add support for Python 3.4.

  • Add support for testing on Travis.

4.0.4 (2013-03-15)

  • Ensure that ZopePythonExpr and PythonExpr are separate classes even when zope.untrustedpython is not available. Fixes a ZCML conflict error in zope.app.pagetemplate.

4.0.3 (2013-02-28)

  • Only allow zope.untrustedpython to be a dependency in Python 2.

  • Fix buildout to work properly.

4.0.2 (2013-02-22)

  • Migrate from zope.security.untrustedpython to zope.untrustedpython.

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

  • Add 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)

  • Replace deprecated zope.interface.classProvides usage with equivalent zope.interface.provider decorator.

  • Replace deprecated zope.interface.implements usage with equivalent zope.interface.implementer decorator.

  • Drop 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)

  • Fix 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.

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

3.6.1 (2011-08-23)

  • Fix issue with missing default value for strictinsert.

3.6.0 (2011-08-20)

  • Replace 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.

  • Remove ancient copyright from test files (LP: #607228)

3.5.2 (2010-07-08)

  • Fix 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)

  • Remove use of zope.testing.doctestunit in favor of stdlib’s doctest.

  • Add dependency on “zope.security [untrustedpython]” because the engine module uses it.

3.5.0 (2009-05-25)

  • Add test coverage reporting support.

  • Move ‘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.3.0.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zope.pagetemplate-4.3.0-py2.py3-none-any.whl (50.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file zope.pagetemplate-4.3.0.tar.gz.

File metadata

File hashes

Hashes for zope.pagetemplate-4.3.0.tar.gz
Algorithm Hash digest
SHA256 e2afe89feaeafe46b79e11ec04bd28dacd0a40f13fd9079cacea9dd3dca1c57e
MD5 e942a342de88c801552d0ae65c580994
BLAKE2b-256 2f976886a21b497adf28f921c3e40811e938e711968b4edf5f3b0e4a360993d9

See more details on using hashes here.

File details

Details for the file zope.pagetemplate-4.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for zope.pagetemplate-4.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 26abe11f77e68a6bd1871cede2bf8315968f49dbe01afa95f6a89500797b115e
MD5 cf8a3c3f3928c52fb02789b141464028
BLAKE2b-256 ab9615f9edff0dbd977a767efaa18b89708a8f74a9750cd2da7e4f77055eee70

See more details on using hashes here.

Supported by

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