Dolmen布局/视图选择器
项目描述
该包 dolmen.app.viewselector 是 Dolmen 应用的扩展,允许基本管理替代视图。
关于
在CMS中,为单个项目设计并提供多个视图通常非常有用。这些视图可以根据特定的上下文和情况相关。 dolmen.app.viewselector 允许您将视图定义为渲染特定上下文的“替代”选项。然后,菜单为您提供选择最相关视图的机制。
快速概述
要知道一个组件可以提供替代视图,我们需要明确指定它。一个接口定义了“选择器”功能
>>> from dolmen.app.viewselector import IViewSelector >>> list(IViewSelector) ['selected_view'] >>> IViewSelector['selected_view'] <...TextLine...>
IViewSelector接口定义了一个字段,称为“selected_view”。该字段的值仅仅是当前使用的页面组件的名称
>>> IViewSelector['selected_view'].default u'base_view'
默认情况下,默认值设置为“base_view”。
定义内容
为了演示替代视图,我们首先需要一个知道视图选择的环境
>>> from zope.location import Location >>> from zope.interface import implements >>> class Bear(Location): ... implements(IViewSelector) ... selected_view = u"sleeping"
我们将默认视图定义为名为“sleeping”的视图。
定义替代视图
替代视图是注册到专用菜单的“pages”(参见 megrok.layout 和 dolmen.app.layout)。要定义替代视图,我们从 AlternativeView 基类继承
>>> import grokcore.view as grok >>> from grokcore.component import testing >>> from dolmen.app.viewselector import AlternativeView >>> class Sleeping(AlternativeView): ... grok.context(Bear) ... grok.title("Sleeping bear") ... ... def render(self): ... return u"RRrrr..." >>> testing.grok_component('sleeping', Sleeping) True
我们定义的默认值"IViewSelector"的“睡眠”视图现在已经被定义并注册。让我们再注册两个视图,以填充菜单并提供一个“真实”的使用案例。
>>> class PolarFur(AlternativeView): ... grok.context(Bear) ... grok.title("Polar bear") ... ... def render(self): ... return u"I'm white !" >>> testing.grok_component('polar', PolarFur) True >>> class SpringFur(AlternativeView): ... grok.context(Bear) ... grok.title("Spring bear") ... grok.require("dolmen.content.Edit") ... ... def render(self): ... return u"I'm brown !" >>> testing.grok_component('spring', SpringFur) True
默认动态索引
为了渲染所选视图,我们使用另一个视图。我们可以称之为“路由”视图,因为它用于查找和渲染所需的组件。
我们首先需要实例化两个所需的组件,内容和请求
>>> from zope.publisher.browser import TestRequest >>> herman = Bear() >>> request = TestRequest()
内容提供IViewSelector接口,该接口的“路由”视图已注册
>>> IViewSelector.providedBy(herman) True
根据惯例,“路由”视图称为“index”,可以作为一个基本视图进行查找
>>> from zope.component import getMultiAdapter >>> index = getMultiAdapter((herman, request), name="index") >>> index <dolmen.app.viewselector.select.SelectedView...>
此视图渲染时,将查找并渲染名为< cite>selected_view属性的视图,该属性已为相同的内容和请求注册
>>> herman.selected_view u'sleeping' >>> index.render() u'RRrrr...'
如果我们为< cite>selected_view属性设置不同的值,则查找的视图将相应更改
>>> herman.selected_view = u"polarfur" >>> index.render() u"I'm white !" >>> herman.selected_view = u"springfur" >>> index.render() u"I'm brown !"
如果视图不存在,则返回一个基本消息
>>> herman.selected_view = u"nothing" >>> index.render() u'The selected view is not a valid IPage component.'
通过用户界面应用视图
所选视图可以从可用的替代视图列表中选择。此选择通过菜单进行,其中已注册视图。
应用
上面的菜单公开了为IViewSelector内容注册的视图“viewselector”。此视图是实际更改< cite>selected_view属性为点击值的组件。
让我们模拟一个点击以测试此视图。当前< cite>selected_view属性的值不一致
>>> herman.selected_view u'nothing'
我们希望将其更改为现有内容,如< cite>PolarFur 视图
>>> request = TestRequest(form={'name': u'polarfur'}) >>> handler = getMultiAdapter((herman, request), name="viewselector") >>> handler <dolmen.app.viewselector.select.ApplyView ...>
以管理员用户登录,我们可以应用所选视图
>>> login('zope.mgr', request) >>> handler() 'http://127.0.0.1/herman'
视图将您重定向到内容的基视图。值已更改
>>> herman.selected_view u'polarfur'
更改
0.2.1 (2010-05-31)
通过删除zip-safe标志修复了egg dist。
0.2 (2010-03-26)
修复了缺失的MANIFEST。
0.1 (2010-03-25)
初始发布。
dolmen.app.viewselector-0.2.1.tar.gz 的散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0cdb745c696325b0f8d5befc12703ac38d145126ad7f52336150e51b3a50ec67 |
|
MD5 | efbc228f9a67de1ebc9233fd06490b2e |
|
BLAKE2b-256 | b83b01ae6e4f0aee56c9f3407f9ceaadb16f75680b741118bcab1f8bc8dd30c0 |