我想为我的一些Django页面返回410错误而不是返回404。基本上,我不想拨打raise Http404('some error message')
,而是拨打raise Http410('some error message')
快捷方式。
我很困惑,因为在django.http中,函数Http404只是:
class Http404(Exception):
pass
因此,如果我做同样的事情并创建我的Http410函数,我会认为它看起来像:
class Http410(Exception):
pass
但是,执行此操作会返回异常,但会提供500错误页面。如何重新创建Http404异常的魔力?我应该注意,我需要从我的模型(而不是视图)中引发异常,所以我不能只返回一个HttpResponseGone。
提前致谢!
更新: 我完全了解HttpResponseGone,并在我原来的问题中提到了这一点。我已经知道如何在我的观点中返回这个。我的问题是:你如何提出一个Http 410异常与你如何引发Http 404异常类似?我希望能够在任何地方提出这个例外,而不仅仅是在我的观点中。谢谢!
答案 0 :(得分:22)
from django.http import HttpResponse
return HttpResponse(status=410)
答案 1 :(得分:16)
Django没有包含这种机制,因为它应该是正常的工作流,而不是错误条件,但是如果你不想把它当作一个返回响应,并且作为一个例外,只需要实现一个middleware。
class MyGoneMiddleware(object):
def process_exception(self, request, exception):
if isinstance(exception, Http410):
return HttpResponseGone("Gone!")
return None
答案 2 :(得分:11)
在视图处理程序中返回HttpResponseGone
,HttpResponse
的子类。