简化z3c.pagelet处理
项目描述
gocept.pagelet
简化z3c.pagelet处理
版权(c)2007-2016 gocept gmbh & co. kg 保留所有权利。
本软件受Zope公共许可证,版本2.1(ZPL)的条款约束。ZPL的副本应随本分发一同提供。本软件按“原样”提供,并放弃所有明示或暗示的保证,包括但不限于标题保证、适销性保证、非侵权性和针对特定目的的适用性保证。
更改
2.0 (2023-07-18)
放弃对Python 2.7、3.5、3.6的支持。
添加对Python 3.9、3.10、3.11的支持。
1.1 (2019-06-10)
支持Python 3.5、3.6、3.7、3.8、PyPy和PyPy3。
使用tox进行测试。
1.0 (2016-04-06)
将bootstrap.py更新到
zc.buildout 2.3
。使用py.test作为测试运行器。
明确支持Python 2.7。目前不支持其他Python版本。
0.4 (2013-03-28)
当使用仅包含模板的ZCML注册页面组件时,模板的名称将在生成的类的
repr
中渲染,以便在调试时了解此类的用途。更新测试,使用Python的
doctest
代替已弃用的zope.testing.doctest
。
0.3 (2009-12-27)
使用
zope.browserpage
和zope.browsermenu
代替zope.app.publisher
。
0.2 (2009-12-27)
允许任意数量的上下文元素进行适配。
0.1 (2008-09-20)
首次公开发布。
贡献者
Michael Howitz <mh at gocept dot com>
Christian Theune <ct at gocept dot com>
简化z3c.pagelet注册
<gocept:pagelet>
指令允许更容易地注册z3c.pagelets。它的工作方式与<browser:page>
非常相似。
设置
我们需要一些ZCML设置
>>> import sys >>> from zope.configuration import xmlconfig >>> import gocept.pagelet >>> context = xmlconfig.file('meta.zcml', gocept.pagelet)
仅模板
只需使用模板作为页面组件即可。不需要类
>>> 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)
我们现在应该有一个页面
>>> 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'
当渲染页面组件时,将使用测试模板
>>> pagelet.render() u'Hello from the test template.\n'
仅类
当然,也可以不使用模板注册一个类。创建一个类并将其在模块中可用
>>> from z3c.pagelet.browser import BrowserPagelet >>> class MyPagelet(BrowserPagelet): ... """Custom pagelet""" ... def render(self): ... return u"Hello from the custom pagelet."""
在虚拟包custom
下使其可用
>>> sys.modules['custom'] = type( ... 'Module', (), ... {'MyPagelet': MyPagelet})()
通过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)
获取页面组件
>>> 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 MyPagelet2(BrowserPagelet): ... """Custom pagelet""" ... i_am_very_custom = True >>> sys.modules['custom'] = type( ... 'Module', (), ... {'MyPagelet': MyPagelet2})()
通过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