12

@require_POST我的问题很简单,使用装饰器时如何在 Django 中显示 HTTP 状态 405(不允许方法)的自定义错误页面?

我正在使用django.views.decorators.http.require_POST装饰器,当 GET 请求访问页面时,控制台显示 405 错误,但页面只是空白(甚至不是 Django 错误页面)。如何让 Django 针对此类错误显示自定义和/或默认错误页面?

编辑:值得一提的是,我已经尝试在我的模板文件夹中放置一个 404.html、500.html 和 405.html 页面——但这也无济于事。我也在DEBUG = True和之间变化False,但无济于事。

4

3 回答 3

14

您必须编写自定义 Django 中间件。您可以从这个开始并扩展它以检查 405.html 文件是否存在等等:

from django.http import HttpResponseNotAllowed
from django.template import RequestContext
from django.template import loader


class HttpResponseNotAllowedMiddleware(object):
    def process_response(self, request, response):
        if isinstance(response, HttpResponseNotAllowed):
            context = RequestContext(request)
            response.content = loader.render_to_string("405.html", context_instance=context)
        return response

如果您不知道如何安装中间件,请查看文档:

http://docs.djangoproject.com/en/dev/topics/http/middleware/

您还可以查看这篇文章:

http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

于 2011-01-08T16:13:55.877 回答
0

如果您查看 django.views.defaults 的文档和源代码,您会发现仅支持 404 和 500 错误,您只需添加 404.html 即可。500.html 到您的模板目录。

在文档中。您还可以阅读以下内容

在 Django 中返回 HTTP 错误代码很容易。除了 200(表示“OK”)之外,还有许多常见 HTTP 状态代码的 HttpResponse 子类。您可以在请求/响应文档中找到可用子类的完整列表。

因此,如果要返回 405 错误,则必须使用 HttpResponseNotAllowed

一个例子

于 2011-01-06T11:40:48.210 回答
0

我不确定这是否可能。也许您应该考虑提交错误报告。

于 2011-01-08T15:31:11.830 回答