Django - 自定义 403 模板

Posted

技术标签:

【中文标题】Django - 自定义 403 模板【英文标题】:Django - custom 403 template 【发布时间】:2015-11-06 00:12:07 【问题描述】:

我正在尝试在 Django 1.5 中使用我的 403、404、500 自定义模板。 404 和 500 完美运行,但 403 仍然向我展示了内置的 Django 403 模板。

我将所有三个模板都放在项目的根模板目录中。 它们被命名为:403.html、404.html、500.html

我也尝试过使用:

urls.py:

 from django.utils.functional import curry
 handler403 = curry(permission_denied, template_name='403.html')

还有: urls.py:

handler403 = 'proj_name.views.my_custom_permission_denied_view'

项目名称/views.py

def my_custom_permission_denied_view(request):
    return ethoos_response('403.html', None, request)

这两种方法都不起作用。同样在 404 和 500 中,我没有使用这些方法,只使用模板目录中的模板,并且显示了它们。

根据 Django 的文档,这三个假设都以相同的方式工作。 https://docs.djangoproject.com/en/1.5/topics/http/views/#the-403-http-forbidden-view

我不知道为什么只有 403 没有。 谢谢。

【问题讨论】:

对我有用,应该不需要覆盖任何代码。你的确切 django 版本是什么,你的模板设置是什么样的,你有没有在 403 处理程序中设置断点来查看发生了什么? 我的 Django.version 是 (1, 5, 0, 'final', 0) 。我还没有断点处理程序。 您使用 Django 1.5 的任何特殊原因?在两周的时间内,它会在一整年都不受支持djangoproject.com/download django 中 403 处理程序的最新文档在这里 docs.djangoproject.com/en/1.11/topics/http/views/… 【参考方案1】:

对于常规的 403 权限被拒绝页面,创建 403.html 模板应该可以工作。

但是,对于 CSRF 错误(也返回状态码 403),您应该创建一个 403_csrf.html 模板。

在 Django 1.10+ 中创建 403_csrf.html 模板有效。对于早期版本,您必须将 CSRF_FAILURE_VIEW 设置更改为您要使用的视图。

请参阅CSRF docs 了解更多信息。

本周在 Django 开发者邮件列表中,a discussion 讨论了为什么 CSRF 失败视图的行为不同。

【讨论】:

谢谢!就是这样。我还推荐这个解决方案示例:***.com/questions/26925244/…【参考方案2】:

您需要使用403_csrf.html

【讨论】:

以上是关于Django - 自定义 403 模板的主要内容,如果未能解决你的问题,请参考以下文章

Django 自定义错误页面 403 404...

Django 自定义错误页面 403 404...

Django Ajax 403 仅在从自定义 localhost url 发布时

在自定义模板标签中解析 Django 自定义模板标签

Django自定义模板函数

Django之博客系统:自定义模板标签