2013-03-28 2 views
1

Pyramid Docs - Using Hooks에 설명 된대로 사용할 때 지정된 템플릿을 렌더링 할 수 없습니다.'렌더러'가있는 피라미드에서 '@notfound_view_config'사용

views.py :

@notfound_view_config(renderer='templates/notfound.pt') 
def notfound(request): 
    return Response('Not Found, dude', status='404 Not Found') 

템플릿/notfound.pt :

<html xmlns="http://www.w3.org/1999/xhtml" 
     metal:use-macro="base"> 

<tal:block metal:fill-slot="content"> 

      <!-- Example row of columns --> 
      <div class="row"> 
       <div class="span12"> 
        <h1>Error:</h1> 
        <p>Uh, oh... you snagged an error:</p> 
        <pre>"${request}"</pre> 

        <p>You can return to the <a href="${request.application_url}">homepage</a> if you wish.</p> 

       </div> 
      </div> 

</tal:block> 
</html> 

존재하지 않는 페이지를 타격, 내가 보는 메시지 "를 찾을 수 없음, 친구의"에 빈 페이지,하지만 내 템플릿을 볼 것으로 예상했다 "어, 오 ... 당신이 오류를 저지른!" 그 다음에 요청 정보가옵니다.

는 나는이 잘못 읽고 있어요 의심 :

notfound_view_config 생성자는 pyramid.view.view_config의 생성자와 같은 인수의 대부분을 받아들입니다. 동일한 장소에서 사용 된 일 수 있으며 대체로 동일한 방식으로 동작합니다. 을 제외하고 항상 '정상' 보기 대신 찾을 수없는 예외보기를 등록합니다. 한편

는, pryamid.view.view_config에서 지원 이후 내가 매개 변수로 '렌더링'를 지정 할 수 있어야한다 보인다. 반면, '렌더러 없음'옵션을 사용하지 않고 항상 [예외를 찾을 수 없음] [3]을로드하는 것처럼 들립니다.

궁극적 인 궁금증 (목표)은 페이지를 찾을 수 없을 때마다 내 템플릿을 표시하거나 렌더링하는 방법입니다.

+0

에서 [소스 코드] (https://github.com/Pylons/pyramid/blob/master/pyramid/config/views.py#L1892) 명확하게 렌더링을 처리하는, 그래서 이것은 그냥 작동합니다. 뷰에서 반환 된 dict을 변경하여 등록 또는 재시작을 혼동하지 않았는지 100 % 확인하십시오. –

답변

3

피라미드의 렌더러/뷰 관계는 항상 동일합니다. Response 개체를 반환하면 선언 된 렌더러가 무시됩니다. 이를 통해 if submitted: return HTTPFound(location=...) else: return {}과 같은 작업을 수행 할 수 있습니다. 응답 객체에 영향을 미치고 렌더러를 계속 사용하려면 필요한 dict을 반환하고 모든 렌더러에 사용되는 응답 객체 request.response을 변경합니다.

@notfound_view_config(renderer='templates/notfound.pt') 
def notfound(request): 
    request.response.status = 404 
    return {} 
+0

감사합니다. 그랬어! – dhildreth

관련 문제