我现在有点困惑。
我可以覆盖Django中的handler404和handler500。我想,我可以这样做:
try:
mymodel = MyModel.objects.get(id=someid)
except MyModel.DoesNotExist:
raise Http404
但我很想知道究竟是什么造成了这个404 - 服务器错误或只是错误的网址..
这怎么可能?我可以在handler404内有大约500个错误信息吗?
如果是500,则handler500确实有RequestContext
,{{STATIC_URL}}
之类的内容将停止在500.html中运行。这就是为什么我想,我会提出404而不是发送电子邮件404管理员内部的管理员有关错误。这有意义吗?
答案 0 :(得分:1)
底线是:
为了生成/导致/提高500,您必须请求有效的URL。
非常简单 - 只有在没有500错误时才会引发404,因为500错误不会阻止链接生效。
所以如果是404,那么它也没有机会提高500;因为没有您请求有效的URL,没有运行服务器端代码;因此不能触发500。
它们是相互排斥的。
在您的特定情况下,会发生以下情况:
/foo/bar/1
raise Http404
时,它将返回一个响应,其中包含404错误代码。您可以愉快地返回任何其他响应和错误代码组合。从流程中可以看出,无论如何,要返回500响应,URL必须有效。