문제

를 사용하여 마리스의 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 이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top