Skip to main content

Easier z3c.pagelet handling

Project description

gocept.pagelet

Easier z3c.pagelet handling

Copyright (c) 2007-2016 gocept gmbh & co. kg All Rights Reserved.

This software is subject to the provisions of the Zope Public License, Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. THIS SOFTWARE IS PROVIDED “AS IS” AND ANY AND ALL EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.

Changes

2.0 (2023-07-18)

  • Drop support for Python 2.7, 3.5, 3.6.

  • Add support for Python 3.9, 3.10, 3.11.

1.1 (2019-06-10)

  • Claim support of Python 3.5, 3.6, 3.7, 3.8, PyPy and PyPy3.

  • Use tox for testing.

1.0 (2016-04-06)

  • Update bootstrap.py to a zc.buildout 2.3.

  • Use py.test as test runner.

  • Declare the explicit support of Python 2.7. No other Python versions are currently supported.

0.4 (2013-03-28)

  • When registering a pagelet using ZCML which only has template, the name of the template is rendered in the repr the generated class to have a clue what is the purpose of this class when debugging.

  • Updated tests to use Python’s doctest instead of deprecated zope.testing.doctest.

0.3 (2009-12-27)

  • Using zope.browserpage and zope.browsermenu instead of zope.app.publisher.

0.2 (2009-12-27)

  • Allow arbitrary number of context elements for adaptation.

0.1 (2008-09-20)

  • First public release.

Contributors

  • Michael Howitz <mh at gocept dot com>

  • Christian Theune <ct at gocept dot com>

Easy z3c.pagelet registration

The <gocept:pagelet> directive allows easier registration of z3c.pagelets. It behaves quite like <browser:page>.

Setup

We need some zcml setup:

>>> import sys
>>> from zope.configuration import xmlconfig
>>> import gocept.pagelet
>>> context = xmlconfig.file('meta.zcml', gocept.pagelet)

Template only

It is possible to just use a template as pagelet. A class is not required:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="index.html"
...       for="*"
...       permission="zope.Public"
...       template="test-template.pt"
...       />
... </configure>
... """, context)

We should now have a page:

>>> import zope.component
>>> from zope.publisher.browser import TestRequest
>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='index.html')
>>> pagelet
<gocept.pagelet.zcml.SimplePagelet from .../gocept/pagelet/test-template.pt object at 0x...>
>>> pagelet.__name__
u'index.html'

When we render the pagelet the test-template is used:

>>> pagelet.render()
u'Hello from the test template.\n'

Class only

Of course it’s also possible to register a class without a template. Create a class and make it available in a module:

>>> from z3c.pagelet.browser import BrowserPagelet
>>> class MyPagelet(BrowserPagelet):
...     """Custom pagelet"""
...     def render(self):
...         return u"Hello from the custom pagelet."""

Make it available under the fake package custom:

>>> sys.modules['custom'] = type(
...     'Module', (),
...     {'MyPagelet': MyPagelet})()

Make it available via ZCML:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="class.html"
...       for="*"
...       permission="zope.Public"
...       class="custom.MyPagelet"
...       />
... </configure>
... """, context)

Get the pagelet:

>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='class.html')
>>> pagelet
<gocept.pagelet.zcml.MyPagelet object at 0x...>
>>> pagelet.render()
u'Hello from the custom pagelet.'

Class and template

It’s for course also possible to specify both class and template. So create another pagelet class and register it:

>>> class MyPagelet2(BrowserPagelet):
...     """Custom pagelet"""
...     i_am_very_custom = True
>>> sys.modules['custom'] = type(
...     'Module', (),
...     {'MyPagelet': MyPagelet2})()

Make it available via zcml:

>>> context = xmlconfig.string("""
... <configure
...     xmlns:gocept="http://namespaces.gocept.com/zcml">
...   <gocept:pagelet
...       name="class-template.html"
...       for="*"
...       permission="zope.Public"
...       class="custom.MyPagelet"
...       template="test-template.pt"
...       />
... </configure>
... """, context)
>>> pagelet = zope.component.getMultiAdapter(
...     (object, TestRequest()), name='class-template.html')
>>> pagelet
<gocept.pagelet.zcml.MyPagelet2 object at 0x...>
>>> pagelet.render()
u'Hello from the test template.\n'
>>> pagelet.i_am_very_custom
True

Project details


Download files

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

Source Distribution

gocept.pagelet-2.0.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

gocept.pagelet-2.0-py2.py3-none-any.whl (9.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file gocept.pagelet-2.0.tar.gz.

File metadata

  • Download URL: gocept.pagelet-2.0.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for gocept.pagelet-2.0.tar.gz
Algorithm Hash digest
SHA256 9be6b40f948c6cdee4e5af91d5c707cc375142a327ecb6f610d9aa5315f0578d
MD5 0ed1fdd9fdd771b8dbe0df76ef495910
BLAKE2b-256 600052f280d88249ea40e6fff0914df484520604e1a18074e65c809fe1e961be

See more details on using hashes here.

File details

Details for the file gocept.pagelet-2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for gocept.pagelet-2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7ef7da8967266e8028d4a9be61bfa778d1cfb7ccf18562a6059b49f928a549d6
MD5 d84a0c8501f58f1f8652e7308fd7d3db
BLAKE2b-256 e819d6317f89b9c9fbcda6926a2d2ce5a6c93475e7bb93d19eef89095eda95a5

See more details on using hashes here.

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