使用 Marius Gedminas 的优秀博客文章,我为我的站点中的文件夹创建了一个自定义遍历器。
这让我可以展示:http://foo.com/folder/random_id
代替:http://foo.com/folder/object.html?id=random_id
配置方面效果很好,我可以捕获 random_ids 并在我的消息中搜索正确的,准备显示。
我的问题是我不确定如何通过我常用的页面模板显示数据 - 在他的原始代码中的 TODO 点;)
if name == 'mycalendar':
mycalendar = ... # TODO: do something to get the appropriate object
return mycalendar
通常我会使用类似的东西:
class Test(BrowserPage):
template = ViewPageTemplateFile('atest.pt')
def __call__(self):
return self.template()
但我无法弄清楚如何在自定义遍历的上下文中正确执行此操作。
更新:要清楚,我想避免在 url 中添加任何其他内容(否:http: //foo.com/folder/random_id/read)。
我不需要通过任何其他地址访问该视图(否:http: //foo.com/folder/read)
我想使用的视图的 ZCML 是:
<browser:page
for="foo.interfaces.IFooFolderContainer"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>
我猜(根据进一步的建议),大致如下:
return getMultiAdapter((mycalendar, self.request), IPageTemplate, name=u'read')
甚至是正在返回的对象类型的默认视图(在本例中为 dict):
<browser:page
for="dict"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>