Django - 自定义处理程序500不起作用,尽管有以下文档

我按照文档的步骤逐步搜索,并在任何地方搜索解决方案,但我的自定义不起作用。我将詹戈2.2与Python 3.8一起使用。handler500


这是我 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()


编辑我设置了一个404处理程序并对其进行了测试,它工作得很好。为什么不是500?


红糖糍粑
浏览 93回答 3
3回答

DIEA

找到解决方案我有一个名为 的设置设置为 。这似乎禁用了我的自定义处理程序。它现在完美地工作。DEBUG_PROPAGATE_EXCEPTIONSTrue

HUH函数

谢谢胡安,这是必要的设置。文档参考DEBUG = False如果 DEBUG 设置为 True(在设置模块中),则永远不会使用 500 视图,而是显示回溯,并显示一些调试信息

慕丝7291255

引用詹戈文档如果实现自定义视图,请确保它接受参数并返回 .您必须在 .requestHttpResponseServerErrorHttpResponseServerErrorhandler500实现所有这些的一个非常简单的方法就是包含在您的视图中def handler500(request, exception, template_name="my_template.html"):     response = render_to_response("my_template.html")     response.status_code = 500     return response这样,您就不需要更改 URL 协议中的任何内容。此方法确实要求模板位于根模板文件夹的顶部。也许把它命名为“500.hml”,它会跳到顶部。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python