10

我想为我的一些 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 异常?我希望能够在任何地方提出这个例外,而不仅仅是在我看来。谢谢!

4

3 回答 3

24
from django.http import HttpResponse
return HttpResponse(status=410)
于 2010-11-17T20:00:46.750 回答
16

Django 没有为此提供机制,因为消失应该是正常的工作流程,而不是错误条件,但如果您不想将其视为返回响应,并且作为异常,只需实现一个中间件

class MyGoneMiddleware(object):
    def process_exception(self, request, exception):
        if isinstance(exception, Http410):
            return HttpResponseGone("Gone!")
        return None
于 2010-11-17T21:34:14.173 回答
11

在您的视图处理程序中返回 a HttpResponseGone,它的子类。HttpResponse

于 2010-11-17T20:03:55.613 回答