【问题标题】:Django: Display error message passed by Http404("msg") in custom 404 error handlerDjango:在自定义 404 错误处理程序中显示 Http404("msg") 传递的错误消息
【发布时间】:2017-11-18 02:19:16
【问题描述】:

使用 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)

然后我怎样才能得到错误消息?我读了很多关于它的问题like this one,但大多数答案是指在 html 文件中获取消息,而不是在自定义 python 错误处理函数中。

编辑: 问题是,我看不到调试页面,因为显然只有在调用 myError() 时才会出现错误,而且只有在设置中出现 debug=False 时才会发生这种情况。

【问题讨论】:

  • 不要说Server Error (500),您应该包括完整的回溯,来自您的日志/错误电子邮件。
  • @Alasdair 查看编辑。还有其他可能看到调试页面吗?我在终端中没有收到错误
  • 你是对的,你看不到黄色的错误页面,因为你需要设置DEBUG=False来测试自定义的404页面。我希望在您的日志或发送给站点管理员的电子邮件中看到回溯。

标签: python django http-status-code-404 extract-error-message


【解决方案1】:

请求默认没有error_404_message属性,所以request.error_404_message会给你一个错误。

The answer you linked to 将其设置为属性,但我不明白您为什么要在 Django 1.9+ 中执行此操作,因为您已经可以访问视图中的异常。

您的自定义视图的签名应该是:

def myError(request, exception, template_name='404.html'):
    ...

您现在可以访问exception。您可以查看default page not found view 以了解它如何从异常中提取消息。

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多