【问题标题】:Django - custom 403 templateDjango - 自定义 403 模板
【发布时间】: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/…

标签: python django templates http-status-code-403 django-csrf


【解决方案1】:

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

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

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

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

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

【讨论】:

【解决方案2】:

您需要使用403_csrf.html

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 2017-02-20
    • 2012-03-05
    • 1970-01-01
    • 2019-04-03
    • 2018-09-07
    • 2015-12-01
    • 2017-05-02
    • 2021-07-13
    相关资源
    最近更新 更多