使用Marius Gedminas的excellent blog post,我为我的站点中的文件夹创建了自定义遍历器。自定义遍历和页面模板
这让我显示: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()
但我不能解决如何在自定义遍历的上下文中正确执行此操作。
UPDATE:要清楚,我想避免添加任何东西到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')
甚至一个DEFA
<browser:page
for="dict"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>
是的,这个按照你的建议工作 - 虽然我最终在你回答之前使用了以下内容,但它是相似的 - 但是更加混乱/ hackier: return getMultiAdapter((self.context [name],self.request),名= u'read') <浏览器:默认视图 用于= “persistent.dict.PersistentDict” 名称= “读” /> <浏览器: 页= “persistent.dict.PersistentDict” 名=“读” template =“read.pt” permission =“zope.ManageContent” /> – 2009-11-18 15:31:04