我想知道如何用get_object_or_404
显示个性化错误?,我不想要正常的http404页面,我想显示一条消息,结果是无
谢谢:)
答案 0 :(得分:15)
get_object_or_404()
本质上是一个简单的5行函数。除非您有特定的理由使用它,否则请执行以下操作:
try:
instance = YourModel.objects.get(pk=something)
except YourModel.DoesNotExist:
return render_to_response('a_template_with_your_error_message.html')
如果无论出于什么原因你 使用get_object_or_404(),你可以尝试将它放在try: ... except Http404: ...
块中,但老实说,我不能想到一个合理的理由。
答案 1 :(得分:3)
正如michael所述,当使用get_object_or_404时,您无法自定义http 404上给出的消息.DEBUG中提供的消息确实提供了有关异常的信息:“没有MyModel匹配给定的查询。”
在此查看doc。有三个参数:Model,* args和** kwargs。最后两个用于在Model上为get()或filter()构建一个参数。
然而,我编写的原因是为了解决为什么我们要使用辅助函数(例如get_object_or_404()而不是像使用Model.DoesNotExist这样的异常来捕获它的问题。
后一种解决方案将视图层耦合到模型层。为了放松这种耦合,我们可以利用django.shortcuts模块[1]中提供的受控耦合。
答案 2 :(得分:2)
不能用那条捷径来完成。它只能引发Http404异常。如果你想要完全控制,你最好的选择是试试。例如
try:
obj = Model.objects.get(pk = foo)
except:
return HttpResponseRedirect('/no/foo/for/you')
#or
return render_to_response ...
答案 3 :(得分:2)
为什么你没有使用服务器的可靠性来做到这一点?
get_object_or_404()
是否重定向到默认的404页面?
如果您处于调试模式,您将看不到它,但在部署时,django将仅引用服务器的404 html页面。