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

Другие вопросы по тегам