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.viewletzope.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]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用(BluetoothGattCharacteristic)特性中的数据创建、写入和保存csv文件。getValue()   java如何使用groupBy创建一个值为BigDecimal字段平均值的映射?   日期时间Java将iso_即时格式的字符串转换为日期   java如何检索和显示Android firebase的配置文件?   scala AWSJAVASDK:解压缩大小必须小于262144000字节   要应用于列表的java JSTL if条件   java在3个点之间画一个正方形   Kotlin java抽象类IllegaAccessError   java原语双值相等取决于大小?   java有没有一种方法可以对数据集使用compareTo()方法,而不必遍历数据集的每个元素?   java为什么我发送的每个UDP消息都会改变端口源?   重新选择文件时swing Java JTree冻结   java不知道我的游戏是怎么回事   Motif L&F中自定义组合框渲染器中的Java Swing消失文本   java Trade Me API访问前的OAuth