grok的页面模板组件,基于zope.page template
megrok.pagetemplate的Python项目详细描述
导言
megrok.pagetemplate是位于^{tt2}上方的一个薄薄的Grok层$ 包裹。它允许开发人员注册ipagetemplate组件 使用Grokked组件。语法应该非常简单 可读性megrok.pagetemplate只提供一个名为 pagetemplate并使用基本的grokcore.view指令:名称,视图, 上下文,层。为了使它更简单和直接,它使用 用于注册模板文件的grokcore.view模板注册表 与PageTemplate组件关联。
开始
首先,我们导入依赖项:
>>> import grokcore.view as view >>> import megrok.pagetemplate as pt >>> from grokcore.component.testing import grok, grok_component
一个完整而不言自明的例子
为了开始代码本身,让我们解释后面的概念 页面模板组件。显示器通常由 专用组件:视图视图是一个多适配器 上下文和请求。它提供了一种渲染方法 (通常是打电话)如果我们想定制一个视图,我们需要 子类化或重写它在这两种情况下,我们最终得到一个新的 视图和某些代码可能必须重复
pagetemplate组件允许您在呈现时进行交互 水平。这个新组件实现了zope.pagetemplate ipagetemplate接口,注册为多适配器,适应 视图和层(请求类型)。此页面模板可以命名为 更多定制可能性。
让我们建立一个具体的例子来了解这个概念。首先,我们需要 上下文我们的用途是为 可爱的动物:猛犸。首先,让我们创造我们的猛犸象 显示它的简单视图:
>>> from zope.component import getMultiAdapter >>> from zope.pagetemplate.interfaces import IPageTemplate >>> class Mammoth(view.Context): ... """A furry pachyderm ... """ ... nickname = u"Grokky" >>> class MammothView(view.View): ... """A view that display a mammoth ... """ ... view.context(Mammoth) ... ... def update(self): ... self.mammoth_name = u"My name is %s." % self.context.nickname ... ... def render(self): ... template = getMultiAdapter((self, self.request), IPageTemplate) ... return template() >>> grok_component('my_mammoth_view', MammothView) True
正如我们在这里看到的,view render方法是对 页面模板组件。它将呈现 注册表查找。
为了完整起见,这里,我们将提供一个IPageTemplate组件:
>>> class NakedMammoth(pt.PageTemplate): ... """A mammoth shown in its simpliest apparel ... """ ... pt.view(MammothView) ... template = view.PageTemplate( ... '<span tal:replace="view/mammoth_name" /> I am naked !' ... ) >>> grok_component('NakedMammoth', NakedMammoth) True
现在我们的模板已经注册,我们可以尝试调用视图和 要渲染它:
>>> from zope.publisher.browser import TestRequest >>> request = TestRequest() >>> mammoth = Mammoth() >>> mnv = getMultiAdapter((mammoth, request), name="mammothview") >>> print mnv() My name is Grokky. I am naked ! <BLANKLINE>
我们的猛犸象是按预期的样子出现的。不过,我们不能体面地离开 这家伙光着身子。它需要一些皮毛来抵御严寒 西伯利亚的冬天。
为了定制我们的猛犸象渲染,将其从裸体更改为 毛茸茸的,我们将创造一个皮肤,我们将注册我们的新“毛茸茸” 模板组件:
>>> from zope.publisher.interfaces import browser >>> class IFurryLayer(browser.IDefaultBrowserLayer): ... """A layer for furry animals. ... """ >>> furry_request = TestRequest(skin=IFurryLayer) >>> class FurryMammoth(pt.PageTemplate): ... """A mammoth shown in its simpliest apparel ... """ ... pt.view(MammothView) ... pt.layer(IFurryLayer) ... template = view.PageTemplate( ... '<span tal:replace="view/mammoth_name" /> I am all furry !' ... ) >>> grok_component('FurryMammoth', FurryMammoth) True
我们注册了新模板,现在可以测试是否一切正常 如预期使用新的皮肤,我们的猛犸象现在应该毛茸茸的:
>>> mfv = getMultiAdapter((mammoth, furry_request), name="mammothview") >>> print mfv() My name is Grokky. I am all furry ! <BLANKLINE>
注意-我们可以使用非常方便的功能查询组件:
>>> print pt.getPageTemplate(mfv, furry_request) <megrok.pagetemplate.components.ViewPageTemplate object at ...>
太棒了。我们的猛犸象现在已经做好了抵御寒冷的充分准备。不过, 让我们确保最简单的要求把动物从温暖的环境中带走 头发:
>>> mnv = getMultiAdapter((mammoth, request), name="mammothview") >>> print mnv() My name is Grokky. I am naked ! <BLANKLINE>
那很有效。享受吧!
变更日志
0.7(2011-01-31)
- 我们现在使用grokcore.view包中的最新更改 独立模板grokker,以避免重新实现整个 机制。
- 更新为与Grok 1.3+一起使用
0.6(2010-11-10)
- 测试最新的grokcore包。
- 已删除对grokcore.viewlet和zope.testing的依赖项。
0.5(2010-05-27)
- 清理代码以遵守严格的PEP8。已删除未使用的导入。
- Grok 1.1测试
0.4.1(2010-02-22)
- 清单已更新,因此测试的“模板”文件夹 模块现在是源版本的一部分(因此测试现在运行 正确)。
0.4(2010-02-21)
- 清理依赖项,以删除所有zope.app 人工产品。
- 清理了进口和测试。
0.3-Beta3版本
- 要导入的修改测试所有直接需要的指令 packagemegrok.pagetemplate本身[巨魔]
- 添加了一个方便的函数getPageTemplate来查询页面 模板组件
0.2-β2释放
- megrok.pagetemplate已升级为使用最新的 grokcore.view(1.12.1)测试已更正,代码视图为 跑了。[巨魔]
0.1-β1释放
- 初始版本[trollfot]