在Django中返回`HttpResponseNotFound`和提升`Http404`有什么区别?

Nik*_*nko 22 django django-views

显然有两种不同的方法可以在Django中返回404错误:返回一个HttpResponseNotFound对象或引发一个Http404异常.虽然我在我的项目中使用前者,但似乎Django的内部视图主要使用后者.除了"异常是特殊的"口头禅之外,两种方式之间有什么区别,我应该使用哪种方式?

Dan*_*man 19

一个HttpResponseNotFound是就像一个正常的HttpResponse,除了它发送错误代码404.所以,它给你的这个观点来呈现适当的404页面,否则浏览器会显示自己的默认.

抛出一个Http404异常会引发的Django调用自己的404错误观点.实际上,这只是渲染404.html模板并发送它 - HttpResponseNotFound实际上是使用它.但方便的是,您可以在一个地方指定模板(和视图,如果您愿意).


esm*_*ail 5

除了 Daniel 所说的之外,引发Http404异常可以更灵活,因为它允许您从调用堆栈更深处的辅助函数(可能是通常返回非HttpResponse类型的)生成 404 例如,并依赖于 Python 的异常传播而不是必须创建一个HttpResponseNotFound并手动将其传递回您最初制作响应的位置。