Используя превосходное сообщение в блоге Мариуса Гедминаса , я создал специальный траверсер для папки на моем сайте.
Это позволяет мне показать: 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).
I не необходимо, чтобы представление было доступно через любой другой адрес ( Нет : 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"
/>