Django 如何使用get_object_或_404显示个性化错误

Django 如何使用get_object_或_404显示个性化错误,django,django-templates,http-status-code-404,Django,Django Templates,Http Status Code 404,我想知道如何使用get\u object\u或\u 404显示个性化错误,我不想要正常的http404页面,我想显示一条结果为无的消息 谢谢:)用这个快捷方式是办不到的。它只会引发Http404异常。如果您想要完全控制,最好的选择是尝试catch。例如 try: obj = Model.objects.get(pk = foo) except: return HttpResponseRedirect('/no/foo/for/you') #or return re

我想知道如何使用
get\u object\u或\u 404
显示个性化错误,我不想要正常的http404页面,我想显示一条结果为无的消息


谢谢:)

用这个快捷方式是办不到的。它只会引发Http404异常。如果您想要完全控制,最好的选择是
尝试catch
。例如

try:
    obj = Model.objects.get(pk = foo)
except:
    return HttpResponseRedirect('/no/foo/for/you')
    #or
    return render_to_response ...

get\u object\u或_404()
本质上是一个简单的5行函数。除非您有使用它的特定原因,否则只需执行以下操作:

try:
    instance = YourModel.objects.get(pk=something)
except YourModel.DoesNotExist:
    return render_to_response('a_template_with_your_error_message.html')

如果出于任何原因需要使用get\u object\u或\u 404(),可以尝试将其放入
try:。。。除了Http404:…
块,但我真的想不出一个合理的理由。

你为什么不利用服务器的能力来实现这一点呢?
get\u object\u或_404()
正在重定向到默认的404页面,对吗?

如果您处于调试模式,您将看不到它,但部署django时将只参考服务器的404 html页面。

如michael所述,使用get_object_或_404时,您无法自定义http 404上给出的消息。DEBUG中提供的消息确实提供了有关异常的信息:“没有MyModel与给定查询匹配。”

看看这上面的图片。有三个参数:Model、*args和**kwargs。最后两个用于在模型上为get()或filter()构建参数

然而,我写这篇文章的原因是为了解决这样一个问题:为什么我们希望使用诸如get_object_或_404()之类的帮助函数,而不是使用诸如Model.DoesNotExist之类的异常来捕获它

后一种解决方案将视图层耦合到模型层。为了放松这种耦合,我们可以利用django.shortcuts模块中提供的受控耦合