Как отобразить пользовательскую страницу ошибки для состояния HTTP 405 (метод не разрешен) в Django при использовании @require POST

мой вопрос прост, как отобразить пользовательскую страницу ошибки для состояния 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 ответов


вы должны написать пользовательское промежуточное ПО 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/


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

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

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

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

An пример


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