使用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