문제
를 사용하여 마리스의 Gedminas 우수한 블로그 게시물, 을 만들었는 사용자 지정 크로스 폴더에 대한 나의 사이트입니다.
이것이 나를 표시: http://foo.com/folder/random_id
는 대신: http://foo.com/folder/object.html?id=random_id
구성 측면 좋은 작품,나를 잡을 수 있습니 random_ids 및 검색을 통해 내는 메시지에 대한 올바른 것이 준비되어 표시됩니다.
나는 나는 방법을 모르시 표시 데이터를 통해 평소 페이지 템플릿에서 할 일을 지점에서 그의 원래 코드)
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()
그러나 나는 작동할 수 없는 방법을 올바르게 이렇게 하에서의 컨텍스트의 사용자 정의 traversal.
업데이트:명확하고 싶 피 아무것도 추가하 url(No: http://foo.com/folder/random_id/read).
나 지 필요한 뷰를 통해 사용할 수 있는 다른 주소(No: 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"
/>
해결책
하는 것이 더 쉽 귀하의 질문에 대답을 보여준다면 어떤 사용자 지정 크로스입니다.
기본적으로,당신이 원하는 무언가 이것을 좋아한다:
def publishTraverse(self, request, name):
if name in self.context:
return MyMessageView(self.context[name], request)
# fall back to views such as index.html
view = queryMultiAdapter((self.context, request), name=name)
if view is not None:
return view
# give up and return a 404 Not Found error page
raise NotFound(self.context, name, request)
는 MyMessageView 수 있는 간단한 무언가
class MyMessageView(BrowserPage):
__call__ = ViewPageTemplateFile('read.pt')
면책 조항:나는 확실하지 않으면 보기를 직접 인스턴스화에 의해 보호됩니다 security 래;확인 기능 테스트를 확인 익명 사용자가 볼 수 없다는 메시지는 경우에는 당신이 무엇을 원합니다.
다른 팁
끝날 경우 적절한 개체와 사용자 지정 크로스,당신은 단지 압정 템플릿에 이름과 사용자"는"컨텍스트에서는 템플릿입니다.그래서 http://foo.com/folder/random_id/my_template
고서 템플릿을 하는 일반 <h1 tal:content="context/title" />
물건입니다.
IIUC,당신이 원하는 무슨을 렌더링하는'read'볼 때는 누가 요청/폴더/random_id.이 경우에는,당신이해야 할 모든 당신이 당신의 통과 객체를 반환(IFolderContent,어쩌면)나타내는 random_id 을 지정하는'보기'페이지로 defaultView 에 대한 IFolderContent.
이 defaultView 가 필요 없기 때문에 보기에 지정된 random_id 개체에서의 URL 이 있습니다.