2014-05-20 2 views
2

@@export이라는 뷰가 있는데이 매개 변수는 version이라는 선택적 매개 변수를 필요로하므로 @@export?version=3과 같이 호출 할 수 있습니다.매개 변수에 따라 BrowserView에서 사용되는 템플릿을 변경하는 방법

각 버전이 서로 완전히 다를 수 있으므로 모든 버전을 함께 유지하는 거대한 템플릿을 사용하면 유지 관리가 어려울 수 있으므로 BrowserView의 __call__ 메소드에서 동적으로 템플릿을 변경할 수 있다고 생각했습니다. , 다음과 같이 입력하십시오 :

class MyView(BrowserView): 
    template = ViewPageTemplateFile('default_template.pt') 

    def __call__(self): 
     version = self.request.get('version', None) 
     if version is not None: 
     self.template = ViewPageTemplateFile('export-{0}.pt'.format(version)) 
     return self.template() 

실제로 작동하지 않습니다. 그러나 실제로 디버깅 콘솔을 사용하여 다음과 같이 작동하게했습니다.

class MyView(BrowserView): 
    template = ViewPageTemplateFile('default_template.pt') 

    def __call__(self): 
     version = self.request.get('version', None) 
     if version is not None: 
      self.template = ViewPageTemplateFile('export-{0}.pt'.format(version)) 
      return self.template(self) 
     return self.template() 

if 코드 경로에서 반환되는 것에 유의하십시오.

동적으로 템플릿을 변경하는 다른 방법이 있습니까? 왜냐하면이 return self.template(self)은 제게 정말 제정신이 아닌 것 같습니다.

+0

각 옵션에 대한보기를 등록하고 '내보내기'보기를 사용 케이스에서 가능한 리다이렉트로 개조하고 있습니까? –

+0

오류가 발생했거나 새 템플릿을 사용하지 않았습니까? – Mathias

+0

@UlrichSchwarz 가능하면이 내보내기보기를 다른 서버에서 처리해야하므로 HTTP 라이브러리가 얼마나 좋은지 잘 모릅니다. – gforcada

답변

0

당신은 초기화 방법보다는 전화 방법으로 논리를 넣어 시도 할 수 있지만 각각의 목적을 위해 별도의 페이지를 만들고 마스터 페이지에서 그들을 통과하는 것이 좋습니다. zcml : 페이지를 통해 페이지에 대한 메타 정보 (인터페이스, 권한)를 쉽게 공유 할 수 있습니다.

관련 문제