显然,有两种不同的方法可以在Django中返回404错误:返回HttpResponseNotFound
对象或引发Http404
异常。虽然我在我的项目中使用了前者,但Django的内部视图似乎主要使用后者。除了“异常就是异常”的咒语之外,这两种方式之间有什么区别,我应该使用哪种方式?
发布于 2011-10-10 17:04:58
HttpResponseNotFound
就像一个普通的HttpResponse
,只是它会发送错误代码404。因此,您需要在该视图中呈现一个适当的404页面,否则浏览器将显示自己的默认页面。
引发Http404
异常将触发Django调用自己的404error视图。实际上,这只不过是呈现404.html模板并发送它--实际上是使用HttpResponseNotFound
。但方便的是,您可以在一个地方指定模板(如果愿意,还可以指定视图)。
发布于 2015-07-25 05:44:05
除了丹尼尔所说的,引发Http404
异常可以更灵活,因为它允许您从调用堆栈中更深的帮助器函数(可能是通常返回非HttpResponse
类型的函数)生成404,并依赖于Python的异常传播,而不必创建HttpResponseNotFound
并手动将其传递回最初制作响应的位置。
发布于 2016-08-02 09:56:55
除了丹尼尔和埃斯梅尔所说的,作为参考,这是HttpResponseNotFound
Django (v1.8)的字面定义:
class HttpResponseNotFound(HttpResponse):
status_code = 404
为了好的衡量,Http404
的定义
class Http404(Exception):
pass
https://stackoverflow.com/questions/7710444
复制相似问题