首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Django中返回一个`HttpResponseNotFound`和引发一个`Http404`有什么区别?

在Django中返回一个`HttpResponseNotFound`和引发一个`Http404`有什么区别?
EN

Stack Overflow用户
提问于 2011-10-10 16:52:15
回答 3查看 6.3K关注 0票数 27

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

EN

回答 3

Stack Overflow用户

发布于 2011-10-10 17:04:58

HttpResponseNotFound就像一个普通的HttpResponse,只是它会发送错误代码404。因此,您需要在该视图中呈现一个适当的404页面,否则浏览器将显示自己的默认页面。

引发Http404异常将触发Django调用自己的404error视图。实际上,这只不过是呈现404.html模板并发送它--实际上是使用HttpResponseNotFound。但方便的是,您可以在一个地方指定模板(如果愿意,还可以指定视图)。

票数 27
EN

Stack Overflow用户

发布于 2015-07-25 05:44:05

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

票数 5
EN

Stack Overflow用户

发布于 2016-08-02 09:56:55

除了丹尼尔和埃斯梅尔所说的,作为参考,这是HttpResponseNotFound Django (v1.8)的字面定义:

代码语言:javascript
复制
class HttpResponseNotFound(HttpResponse):
    status_code = 404

为了好的衡量,Http404的定义

代码语言:javascript
复制
class Http404(Exception):
    pass
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7710444

复制
相关文章

相似问题

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