2011-01-06 1 views
9

내 질문은 간단합니다. 장고에서 HTTP 상태 405 (메서드가 허용되지 않음)에 대한 사용자 지정 오류 페이지를 표시하려면 어떻게해야합니까? @require_POST 데코레이터를 사용하고 있습니까?@require_POST를 사용할 때 Django에서 HTTP 상태 405 (메서드가 허용되지 않음)에 대한 사용자 정의 오류 페이지를 표시하는 방법

데코레이터 django.views.decorators.http.require_POST 데코레이터를 사용 중이며 GET 요청으로 페이지를 방문하면 콘솔에 405 오류가 표시되지만 페이지는 장고 오류 페이지조차 표시되지 않습니다. 어떻게 이런 종류의 오류에 대한 사용자 정의 및/또는 기본 오류 페이지를 표시 장고를 얻을 수 있습니까?

EDIT : 404.html, 500.html 및 405.html 페이지를 내 템플릿 폴더에 넣으려고했지만 그다지 도움이되지 않습니다. 나는 또한 DEBUG = TrueFalse 사이에서 다양성을 보았습니다.

답변

12

사용자 정의 Django 미들웨어를 작성해야합니다. 이 일을 시작하고 405.html 파일 등이 존재하고 있는지 확인하기 위해 그것을 확장 할 수

http://docs.djangoproject.com/en/dev/topics/http/middleware/

:

from django.http import HttpResponseNotAllowed 
from django.template import RequestContext 
from django.template import loader 


class HttpResponseNotAllowedMiddleware(object): 
    def process_response(self, request, response): 
     if isinstance(response, HttpResponseNotAllowed): 
      context = RequestContext(request) 
      response.content = loader.render_to_string("405.html", context_instance=context) 
     return response 

확인 문서를 당신이 미들웨어를 설치하는 방법을 모르는 경우 문제가 405 개 상태를 반환하지 않습니다 - - 홍보

http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

+0

고마워요. 지금 당연한 것처럼 보입니다. 하지만 내가 예상했던 것보다 훨씬 많은 문제가있다. –

0

documentation과 django.views.defaults의 소스 코드를 보면 404.html resp 만 추가하면되는 방식으로 404 오류와 500 오류 만 지원된다는 것을 알 수 있습니다. 500.html을 템플릿 디렉토리로 복사하십시오.

문서에서 당신은 또한 다음을 읽을 수있다

장고의 HTTP 오류 코드를 반환하는 것은 쉽습니다. 많은 수의 일반적인 HTTP 상태 코드 ( )의 하위 클래스가 있습니다 (즉, "OK"를 의미 함). 요청/응답 설명서 에서 사용 가능한 하위 클래스의 전체 목록을 찾을 수 있습니다. 당신이 405 오류를 반환 할 경우

따라서, 당신은 내가 그 가능성이 확실하지 해요 HttpResponseNotAllowed class

example

+0

난 당신이 질문에 대답하지 않을 두려워 : 당신은 또한이 기사를 확인하실 수 있습니다 oblem은 @require_POST 데코레이터를 사용하는 동안 해당 응답의 템플리트를 표시합니다. –

+0

당신이 맞습니다, 당신이 데코레이터를 사용하고있는 정보를 놓쳤습니다. –

0

을 사용해야합니다. 버그 리포트를 제출하는 것을 고려해야합니다.

+0

글쎄, 우리는 이제 그것이 가능하다는 것을 알고있다. 그러나 그것은 404와 500을위한 페이지를 추가하는 것만 큼 간단합니다. @require_POST 등을위한 내장 된 데코레이터가 있다는 것을 고려할 때, 그것이 더 쉬울 것으로 기대할 것입니다. –