Django: Показать сообщение об ошибке, переданное Http404("msg") в пользовательский обработчик ошибок 404
Используя django 1.11, я определил пользовательский обработчик 404, написав в своем основном URLs.py:
handler404 = 'myApp.views.myError'
Функция myError()
выглядит так:
def myError(request):
#errorMsg=request.error_404_message
return render(request,'404.html')
Эта функция работает, когда я звоню raise Http404("My msg")
, Тем не менее, когда я пытаюсь получить сообщение, переданное Http404
вызов (см. раздел комментариев в myError), мой код падает:
Ошибка сервера (500)
Как я могу получить сообщение об ошибке? Я читал много вопросов об этом, как этот, но большинство ответов касаются получения сообщения в html-файле, а не в пользовательской функции обработчика ошибок python.
РЕДАКТИРОВАТЬ: Проблема в том, что я не могу видеть страницу отладки, потому что ошибка, очевидно, происходит только при вызове myError(), и это происходит только, если debug=False
в настройках.
1 ответ
Запрос не имеет error_404_message
атрибут по умолчанию, так request.error_404_message
выдаст вам ошибку.
Ответ, с которым вы связались, устанавливает его как атрибут, но я не понимаю, почему вы захотите сделать это в Django 1.9+, поскольку у вас уже есть доступ к исключению в представлении.
Подпись вашего пользовательского представления должна быть:
def myError(request, exception, template_name='404.html'):
...
Теперь у вас есть доступ к exception
, Вы можете посмотреть на страницу по умолчанию, которая не найдена, чтобы узнать, как она извлекает сообщение из исключения.