首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django - handler404诉handler500

django - handler404诉handler500
EN

Stack Overflow用户
提问于 2014-08-21 14:39:26
回答 1查看 1.5K关注 0票数 2

我现在有点糊涂了。

在Django中有handler404和handler500,我可以重写它们。我想,我能做到的:

代码语言:javascript
复制
try:
   mymodel = MyModel.objects.get(id=someid)
except MyModel.DoesNotExist:
   raise Http404

但是我很想知道到底是什么导致了这个404服务器错误或者只是一个错误的URL。

这怎么可能?我可以在handler404中获得大约500个错误的信息吗?

在500的情况下,handler500确实有一个RequestContext{{STATIC_URL}}之类的东西将在500.html中停止工作。这就是为什么我认为,我将提高404,而不是电子邮件管理员404处理程序中的错误。这有道理吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 15:05:46

底线是:

为了生成/原因/引发一个500,您必须请求一个有效的URL。

这很简单-- 404只有在没有500错误的情况下才会被引发,因为500错误不会阻止链接有效。

因此,如果它是404,则不可能也引发500;因为如果不请求有效的URL,就不会运行服务器端代码;因此不能触发500。

它们是相互排斥的。

在您的具体案例中,下面是发生的情况:

  1. 你请求/foo/bar/1
  2. 这个URL使用url模式映射到一个视图,如果它匹配--就是这样,您就不再有机会引发404了。
  3. 请求被传递给处理程序--现在,在这个阶段,请求管道无法生成404。
  4. 视图代码中有一个错误--现在可能发生两件事之一:
    1. 您可以尝试/除了来预测此错误,然后就可以引发任何您喜欢的异常。如果此异常也返回一个响应,那么无论该响应是什么--即您在答复中向客户端发送的错误代码。因此,当您使用raise Http404时,它将返回一个带有404错误代码的响应。您可以愉快地返回任何其他响应和错误代码组合。
    2. 发生错误时,您的代码没有捕获,或者您的代码没有返回正确的响应。在本例中,django的默认异常处理程序将返回响应并引发500。这是正常/默认情况。

从流中可以看到,无论如何,要返回500个响应,URL必须是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25429232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档