Django:在自定义 404 错误处理程序中显示由 Http404("msg") 传递的错误消息
Django: Display error message passed by Http404("msg") in custom 404 error handler
使用 django 1.11,我定义了一个自定义的 404 处理程序,通过在我的 main 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 中的注释部分),我的代码崩溃了:
Server Error (500)
我怎样才能得到错误信息?我读了很多关于它的问题 like this one,但大多数答案是指在 html 文件中而不是在自定义 python 错误处理函数中获取消息。
编辑: 问题是,我看不到调试页面,因为错误显然只在调用 myError() 时发生,并且只有在 debug=False
在设置中。
请求默认没有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 以了解它如何从异常中提取消息。
使用 django 1.11,我定义了一个自定义的 404 处理程序,通过在我的 main 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 中的注释部分),我的代码崩溃了:
Server Error (500)
我怎样才能得到错误信息?我读了很多关于它的问题 like this one,但大多数答案是指在 html 文件中而不是在自定义 python 错误处理函数中获取消息。
编辑: 问题是,我看不到调试页面,因为错误显然只在调用 myError() 时发生,并且只有在 debug=False
在设置中。
请求默认没有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 以了解它如何从异常中提取消息。