zope3和Grok的布局组件包。
项目描述
megrok.layout 软件包提供了一种简单的方式来编写可以包含到定义布局中的视图组件。它围绕两个主要组件:页面和布局。
布局
布局是一个允许您设计网站的组件。通常,它是所有页面共享的公共结构。技术上,它是一个基于视图组件接口的类,提供了“渲染”和“更新”方法。
让我们实现一个简单的布局
>>> from megrok.layout import Layout >>> from zope.interface import Interface >>> import grokcore.component as grok>>> class MyLayout(Layout): ... grok.name('mylayout') ... grok.context(Interface) ... ... def render(self): ... return u"a simple layout"
我们使用 grok 我们的组件
>>> grok_component('MyLayout', MyLayout) True
我们检查它是否已正确注册
>>> from megrok.layout import ILayout >>> from zope.component import getMultiAdapter >>> from zope.publisher.browser import TestRequest>>> layout = getMultiAdapter((TestRequest(), Interface), ILayout) >>> isinstance(layout, MyLayout) True >>> layout.render() u'a simple layout'
现在让我们看看如何使用页面在特定上下文中使用此布局。
页面
页面是您希望控制的特定代码。它基于 grokcore.View 浏览器页面实现,因此提供了 render 和 update 方法。render 方法将简单地返回由模板或 render 方法代码生成的特定 HTML 代码,而 __call__ 将查找布局组件并在其中渲染。
首先,我们将创建 2 个模型作为示例。
>>> class Aurochs(grok.Context): ... description = u'Looks like a bull'>>> class Mammoth(grok.Context): ... description = u'Looks like an elephant'
现在让我们创建一个页面来显示它们的描述。
>>> from megrok.layout import Page >>> class AnimalDisplay(Page): ... grok.name('display') ... grok.context(Interface) ... ... def render(self): ... return self.context.description
通过 grok 我们的页面,我们可以使用它。
>>> grok_component('AnimalDisplay', AnimalDisplay) True >>> wooly = Mammoth() >>> page = getMultiAdapter((wooly, TestRequest()), name='display') >>> page.content() u'Looks like an elephant' >>> page() u'a simple layout'
正如我们所看到的,页面正在使用布局,在 __call__ 中进行渲染。当然,这个示例布局没有提供任何有趣的功能。让我们通过使用“content”方法来创建一个更有趣的布局,使用我们的页面
>>> class MammothLayout(Layout): ... grok.context(Mammoth) ... ... def render(self): ... return u'Header. Page: %s. Footer' % self.view.content()>>> grok_component('MammothLayout', MammothLayout) True >>> page() u'Header. Page: Looks like an elephant. Footer'
表单 & 错误页面
表单视图(Form、AddForm、EditForm 和 DisplayForm)和错误视图(NotFoundPage、ExceptionPage、UnauthorizedPage)的基类可用,它们都像页面一样了解布局组件。
变更日志
1.3 (2011-01-12)
与 grokcore.view 2.3 的兼容性。
1.2.0 (2010-12-16)
更新以使用来自 grokcore.view 的新 TemplateGrokker。
1.1.0 (2010-03-03)
z3c.flashmessage 已被 grokcore.message 取代。这个新包负责注册工具,并保留了现有的 API。向后兼容性得到保证。
1.0.2 (2010-02-26)
对 application_url 站点查找的存在性测试错误地使用了“if not”语句。在一个容器中,如果对象为空,则对象被评估为 False。我们现在使用正确的“if .. is None”。[trollfot]
1.0.1 (2010-02-25)
表单现在从 UtilityView 继承,因此获得了 application_url 和 flash 方法。已添加测试以确保行为。[trollfot]
1.0 (2010-02-25)
依赖关系已经得到了大量清理。已移除所有 zope.app 软件包。我们现在使用最小依赖关系并使用最新的 ZTK。此版本可能 不 在 Grok 1.0 上运行。您需要 Grok 1.1rc1 才能使用它。[trollfot]
添加了一个名为UtilityView的组件,它提供了两个有用的方法:application_url、flash。这些方法几乎与在Grok包中找到的相同。application_url使用简单的getSite钩子来获取应用程序的根目录。这可能对某些应用程序来说无关紧要,并且可以被覆盖。[trollfot]
添加了一个名为“messages”的模块,其中包含flash消息实用程序。此模块不被grokked,必须手动grokked。这防止了与grokui.admin的相同组件定义冲突。它还允许您覆盖flash方法,使用除z3c.flashmessage之外的其他方法,然后不受无用实用程序的影响。可以通过在您的项目或包ZCML文件中包含messages.zcml文件来注册flash消息实用程序。[trollfot]
0.9 (2009-09-26)
为不包含html和body标签的表单添加默认模板。[sylvain]
添加了AddForm、EditForm和DisplayForm,所有这些都意识到了布局组件。[sylvain]
0.8 (2009-09-17)
由于从grokcore.view中删除了CodeView,因此已删除CodePage。[sylvain]
0.7 (2009-09-15)
添加了一个CodePage,以与grokcore.view的最后一个版本(高于1.9)兼容。这破坏了与先前版本的兼容性。您需要将任何使用render方法的Page更改为CodePage。[sylvain]
Page上的content属性不再是属性,而是一个方法,因为它隐藏了异常。您可能需要更新您的代码以反映这一变化。[sylvain]
修复MANIFEST.in。[sylvain]
0.6 (2009-09-14)
在调用布局时切换参数顺序[cklinger, sylvain]
添加CHANGES.txt[cklinger]
0.5 (2009-07-24)
删除grok依赖项[cklinger trollfot]
项目详情
megrok.layout-1.3.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 0e4dc09d97688dd5d7cc04f39c41743bd660ad5fa93493f212c938a5a371259b |
|
MD5 | adb6db928573b15f100559bef15e9843 |
|
BLAKE2b-256 | 32719d0f1286f67144352728af0593db8089fff7146245ce2dd1ee704a934435 |