代码之家  ›  专栏  ›  技术社区  ›  arnon cohen

Django-自定义403模板

  •  10
  • arnon cohen  · 技术社区  · 10 年前

    我正在尝试在Django 1.5中使用我的403、404、500自定义模板。 404和500工作得很好,但403仍然向我展示了内置的Django 403模板。

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

    我还尝试使用:

    网址.py:

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

    以及: 网址.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没有。 谢谢

    2 回复  |  直到 10 年前
        1
  •  24
  •   Alasdair    5 年前

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

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

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

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

    a discussion 关于本周Django开发者邮件列表中CSRF失败视图表现不同的原因。

        2
  •  1
  •   alias51    5 年前

    你需要使用 403_csrf.html .