跳转到主要内容

为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浏览器页面的实现,因此提供了一个renderupdate方法。渲染方法将简单地返回由模板或渲染方法代码生成的特定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_urlflash实用工具,*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_urlflash方法。已添加测试以确保行为。 [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]

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源代码分发

grokcore.layout-4.0.tar.gz (18.9 kB 查看散列)

上传时间 源代码

构建分发

grokcore.layout-4.0-py3-none-any.whl (23.9 kB 查看散列)

上传时间 Python 3

由以下机构支持