Metadata-Version: 1.1
Name: gocept.pagelet
Version: 0.4
Summary: Easier z3c.pagelet handling
Home-page: http://pypi.python.org/pypi/gocept.pagelet
Author: Christian Zagrodnick
Author-email: cz@gocept.com
License: ZPL 2.1
Description: ================
         gocept.pagelet
        ================
        
        Easier z3c.pagelet handling
        
        .. image:: https://builds.gocept.com/job/gocept.pagelet/badge/icon
          :target: https://builds.gocept.com/job/gocept.pagelet/
        
        .. contents::
        
        =========
         Changes
        =========
        
        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
        
Keywords: easy z3.pagelet zope3 pagelet zope
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Zope3
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved
Classifier: License :: OSI Approved :: Zope Public License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries :: Python Modules
