Django - Пользовательский обработчик500 не работает, несмотря на следующие документы - PullRequest
0 голосов
/ 11 апреля 2020

Я шаг за шагом следовал документации и искал решение везде, но мой пользовательский handler500 не будет работать. Я использую Django 2.2 с Python 3.8.

Вот мой urls.py:

urlpatterns = [
    # some urls
]

handler500 = "path.to.my.handler"

мой обработчик:

def handler500(request, exception=None, *_, **_k):
    print("yeah I got called")

    return render(request, "my_template.html", {
        "exception": exception
    })

мой взгляд:

def example_view(request):
    # I tried all of these

    return HttpResponseServerError()
    return HttpResponse(status=500)
    raise Exception("There was an error")  # This just shows: "A server error occurred.  Please contact the administrator." in the browser.
    raise HttpResponseServerError()  # This shows the same message as above.
    a_typo  # This typo also shows the same message as above.

Почему ЛЮБОЙ из этих ошибок не показывает мой шаблон? Обработчик не был выполнен в любое время. Функция print() так и не была вызвана.

EDIT Я установил обработчик 404 и протестировал его, он работал отлично. Почему не 500?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

НАЙТИ РЕШЕНИЕ

У меня была настройка под названием DEBUG_PROPAGATE_EXCEPTIONS, установленная на True. Это, казалось, отключило мой пользовательский обработчик. Теперь он отлично работает.

0 голосов
/ 12 апреля 2020

Цитирование Django Документация

Если вы реализуете пользовательское представление, убедитесь, что оно принимает аргумент request и возвращает HttpResponseServerError. Вы должны вернуть HttpResponseServerError в вашем handler500.

Очень простой способ реализовать все это - просто включить в свои представления

def handler500(request, exception, template_name="my_template.html"):
    response = render_to_response("my_template.html")
    response.status_code = 500
    return response

Таким образом, вы не нужно ничего менять в ваших URLConfs. Этот подход требует, чтобы ваш шаблон находился в верхней части папки шаблона root. Может быть, назовите его «500.hml», и он прыгнет наверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...