显然有两种不同的方法可以在Django中返回404错误:返回HttpResponseNotFound
个对象或引发Http404
异常。虽然我在我的项目中使用前者,但似乎Django的内部视图主要使用后者。除了“异常是特殊的”口头禅之外,两种方式之间有什么区别,我应该使用哪种方式?
答案 0 :(得分:18)
HttpResponseNotFound
就像普通HttpResponse
一样,但它会发送错误代码404.因此,您可以在该视图中呈现相应的404页面,否则浏览器将显示其自己的默认值。
引发Http404
异常将触发Django调用自己的404错误视图。实际上,这仅仅是渲染404.html模板并使用HttpResponseNotFound
发送它。但方便的是,您可以在一个地方指定模板(和视图,如果您愿意)。
答案 1 :(得分:3)
除了丹尼尔所说的,提出Http404
例外可以更灵活,因为它允许您生成404例如来自调用堆栈深处的辅助函数(可能是一个通常返回非HttpResponse
类型的函数)并依赖于Python的异常传播,而不必创建HttpResponseNotFound
并手动将其传递回去你最初是在制作你的回应。
答案 2 :(得分:0)
除了Daniel和esmail所说的,作为参考,这实际上是HttpResponseNotFound
Django(v1.8)的定义:
class HttpResponseNotFound(HttpResponse):
status_code = 404
好的衡量标准是Http404
:
class Http404(Exception):
pass