基于zope.pagetemplate的Grok页面模板组件
项目描述
简介
megrok.pagetemplate 是位于 zope.pagetemplate 包之上的一个薄薄的 Grok 层。它允许开发人员使用 Grok 组件注册 IPageTemplate 组件。语法旨在非常简单易读。 megrok.pagetemplate 只提供了一个名为 PageTemplate 的组件,并使用基本的 grokcore.view 指令:name、view、context、layer。为了使其更加简单直接,它使用 grokcore.view 模板注册表来注册与 pagetemplate 组件关联的模板文件。
入门指南
首先,我们导入依赖项
>>> import grokcore.view as view >>> import megrok.pagetemplate as pt >>> from grokcore.component.testing import grok, grok_component
一个完整且自解释的示例
要开始编写代码,让我们解释一下 PageTemplate 组件背后的概念。显示通常由一个专门的组件处理:视图。视图是一个多适配器,适配上下文和请求。它提供了一个渲染方法(通常是 __call__)。如果我们想自定义视图,我们需要子类化它或覆盖它。在两种情况下,我们都会得到一个新的视图,并且可能需要复制一些代码。
PageTemplate 组件允许你在渲染级别进行交互。这个新组件实现了 zope.pagetemplate IPageTemplate 接口,并注册为多适配器,适配视图和层(请求类型)。这个 PageTemplate 可以命名,以提供更多的自定义选项。
让我们构建一个具体的示例来理解这个概念。首先,我们需要一个上下文。我们的用例将为可爱的动物——猛犸象提供不同的渲染。首先,让我们创建我们的猛犸象和一个简单的视图来显示它
>>> 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
如我们所见,视图的渲染方法是调用 PageTemplate 组件。它将渲染由注册表查找找到的模板。
为了完整起见,这里我们将提供一个 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 包的最新更改和独立的模板解析器,以避免重新实现整个机制。
更新为与 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)
更新了 MANIFEST,以便测试模块的“templates”文件夹现在是源发布的一部分(因此测试现在可以正确运行)。
0.4 (2010-02-21)
清理了依赖关系,以去除所有 zope.app 艺术品。
清理了导入和测试。
0.3 - Beta3 发布
修改了测试,以直接从包 megrok.pagetemplate 本身导入所有所需的指令。[trollfot]
添加了一个方便的函数 getPageTemplate 来查询页面模板组件。
0.2 - Beta2 发布
megrok.pagetemplate 已升级,以与最新的 grokcore.view(1.12.1)兼容。已纠正测试,CodeView 已消失。[trollfot]
0.1 - Beta1 发布
首次发布 [trollfot]
项目详情
megrok.pagetemplate-0.7.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2569e1d83b4cf592f722619400c628a87bbf9586ecdc5f4eb3ae662158c9e260 |
|
MD5 | dd867e839622b8fad5c4839d75eca4f8 |
|
BLAKE2b-256 | e17601ec796321a450a352eef24a1bd4ba878da9e864cd70202820f287af3744 |