Используя Marius Gedminas's 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 вид щий для типа объекта (Dict в данном случае), который возвращается:
<browser:page
for="dict"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>
Yup, это сработало так, как вам было предложено - хотя в конце концов я использовал следующее, прежде чем вы ответили, что похоже - но это messier/hackier: return getMultiAdapter ((self.context [name], self.request) имя = u'read ') <браузер: DefaultView для = "persistent.dict.PersistentDict" имени = "читать" /> <браузер: страница для = "persistent.dict.PersistentDict" имени = "читать" template = "read.pt" разрешение = "zope.ManageContent" /> –