Django - 自定义 403 模板

Django - custom 403 template

我正在尝试在 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'

proj_name/views.py

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

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

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

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

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

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

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

有关详细信息,请参阅 CSRF docs

本周 Django 开发人员邮件列表中有 a discussion 关于为什么 CSRF 故障视图表现不同的问题。

您需要使用 403_csrf.html.