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