Как отобразить пользовательскую страницу ошибки для статуса HTTP 405 (метод не разрешен) в Django при использовании @require_POST - PullRequest
11 голосов
/ 06 января 2011

Мой вопрос прост: как отобразить пользовательскую страницу ошибки для статуса HTTP 405 (метод не разрешен) в Django при использовании декоратора @require_POST?

Я использую декоратор django.views.decorators.http.require_POST, и когда страница посещается запросом GET, консоль выдает ошибку 405, но страница просто пуста (даже страница ошибки Django).Как заставить Django отображать пользовательскую страницу и / или страницу ошибки по умолчанию для такого рода ошибок?

РЕДАКТИРОВАТЬ: стоит упомянуть, что я пытался поместить 404.html, 500.html и 405.htmlстраница в моей папке шаблонов - но это тоже не помогает.Я также варьировался от DEBUG = True до False, но безрезультатно.

Ответы [ 3 ]

13 голосов
/ 08 января 2011

Вы должны написать собственное промежуточное ПО Django. Вы можете начать с этого и расширить его, чтобы проверить, существует ли файл 405.html и так далее:

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

Проверьте документы, если вы не знаете, как установить промежуточное ПО:

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

Вы также можете проверить эту статью:

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

0 голосов
/ 08 января 2011

Я не уверен, что это возможно.Возможно, вам следует рассмотреть возможность подачи сообщения об ошибке.

0 голосов
/ 06 января 2011

Если вы посмотрите документацию и исходный код django.views.defaults, вы увидите, что поддерживаются только ошибки 404 и 500, и вам нужно только добавить 404.html и соответственно. 500.html в каталог шаблонов.

В док. Вы также можете прочитать следующее

Возвращение кодов ошибок HTTP в Django это просто. Есть подклассы HttpResponse для ряда общих Коды состояния HTTP, отличные от 200 (что означает «ОК»). Вы можете найти полный список доступных подклассов в документация запроса / ответа.

Таким образом, если вы хотите вернуть ошибку 405, вы должны использовать HttpResponseNotAllowed class

An пример

...