为Grok提供的布局组件包。
项目描述
grokcore.layout 包提供了一种简单的方式来编写视图组件,这些组件可以被包含到定义的布局中。它围绕两个主要组件展开:页面和布局。
布局
布局是一个组件,允许您设计网站。通常情况下,它是所有页面共有的常见结构。从技术上讲,它是一个基于视图组件接口的类,提供了“渲染”和“更新”方法。
让我们实现一个简单的布局
>>> from grokcore.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_component('MyLayout', MyLayout) True
我们检查它是否已正确注册
>>> from grokcore.layout import ILayout >>> from zope.component import getMultiAdapter >>> from zope.publisher.browser import TestRequest>>> layout = getMultiAdapter((TestRequest(), Interface), ILayout) >>> isinstance(layout, MyLayout) True >>> print(layout.render()) a simple layout
现在让我们看看如何使用页面在特定上下文中使用这个布局。
页面
页面是您想要控制的特定代码。它基于grokcore.View浏览器页面的实现,因此提供了一个render和update方法。渲染方法将简单地返回由模板或渲染方法代码生成的特定HTML代码,而__call__将查找布局组件并在其中渲染。
首先,我们将创建2个模型作为示例。
>>> class Aurochs(grok.Context): ... description = u'Looks like a bull'>>> class Mammoth(grok.Context): ... description = u'Looks like an elephant'
现在让我们创建一个页面,用于显示它们的描述。
>>> from grokcore.layout import Page >>> class AnimalDisplay(Page): ... grok.name('display') ... grok.context(Interface) ... ... def render(self): ... return self.context.description
理解我们的页面将使我们能够使用它。
>>> grok_component('AnimalDisplay', AnimalDisplay) True >>> wooly = Mammoth() >>> page = getMultiAdapter((wooly, TestRequest()), name='display') >>> print(page.content()) Looks like an elephant >>> print(page()) 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 >>> print(page()) Header. Page: Looks like an elephant. Footer
表单和错误页面
为表单视图(FormPage、AddFormPage、EditFormPage和DisplayFormPage)和错误视图(NotFoundPage、ExceptionPage、UnauthorizedPage)提供了基类,这些类都像页面一样了解布局组件。
变更日志
4.0 (2023-08-28)
放弃对Python 2.7、3.4、3.5、3.6的支持。
添加对Python 3.7、3.8、3.9、3.10、3.11的支持。
升级到zope.component >= 5。
3.0.3 (2018-02-08)
修复:异常页面没有将内容报告为text/html,而是使用了text/plain(来自它们的zope.errorview基类)。布局和页面都是关于HTML的,而对于这些,合理的内容类型是text/html。
3.0.2 (2018-01-17)
在整个文档中用@grok.implementer()指令替换了grok.implements()的使用。
3.0.1 (2018-01-12)
重新排列测试,以便Travis CI可以获取所有功能测试。
3.0.0 (2018-01-10)
Python 3兼容性。
1.6.1 (2016-02-15)
更新测试。
1.6 (2012-05-10)
将特定布局的查找移动到辅助方法中,以便其他了解布局的组件可以使用相同的查找。
1.5.1 (2012-05-02)
不再需要grokcore.security的[role]额外。
1.5 (2012-05-02)
将了解布局的表单组件移动到grok包中,以便可以混合与grokcore.formib的依赖关系。
添加一个layout指令以选择不同类型的布局。布局类型是在Layout组件上定义的,并使用grokcore.component.provides指令帮助定义。它默认为ILayout以保持兼容性。
更改将静态资源关联到Layout的方式,使用模板解析器设置的新的名称__static_name__。
1.4 (2011-07-13)
将megrok.layout重命名为grokcore.layout。已删除application_url和flash实用工具,*Form组件已重命名为*FormPage。
添加了ExceptionPage、NotFoundPage和UnauthorizedPage布局了解组件。
修复了grokcore.layout.Form组件的默认模板。
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消息实用程序。此模块不被grok,必须手动grok。这防止了与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)
由于CodeView已从grokcore.view中移除,因此已删除CodePage。 [sylvain]
0.7 (2009-09-15)
添加了一个CodePage,以与grokcore.view的最新版本(高于1.9)兼容。这将破坏与先前版本的兼容性。您需要将使用render方法的任何页面更改为CodePage。 [sylvain]
页面上的内容属性不再是属性,而是一个方法,因为它隐藏了异常。您可能需要更新代码以反映这一变化。 [sylvain]
修复MANIFEST.in。 [sylvain]
0.6 (2009-09-14)
在调用布局时切换参数顺序 [cklinger, sylvain]
添加CHANGES.txt [cklinger]
0.5 (2009-07-24)
删除grok依赖项 [cklinger trollfot]
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。