【问题标题】:Django auth confusion in templates模板中的 Django 身份验证混淆
【发布时间】:2010-12-02 15:56:11
【问题描述】:

我正在玩 django auth 库,我遇到了一些我不明白的东西。

我有一个主模板base.html,在这个模板中我有以下代码:

{% if user.is_authenticated %}
   Welcome {{user.username}}, <a href='/accounts/logout/'>Logout</a>
{% else %}
   Welcome Guest, Please <a href='/accounts/login/'>Login</a>
{% endif %}

这在每一页的页眉中重复。然而,在我登录后,除了登录页面本身,它显示welcome guest... 字符串,就好像没有经过身份验证的用户一样。

然而,令人困惑的是,auth 库似乎在其他地方完成了它的工作,我无法访问受登录保护的功能,而且我可以在我登录后等等。

谁能告诉我哪里出错了?

【问题讨论】:

    标签: django templates authentication


    【解决方案1】:

    来自the docs:

    从技术上讲,这些变量只有在您使用 RequestContext 并且您的 TEMPLATE_CONTEXT_PROCESSORS 设置包含默认的 "django.contrib.auth.context_processors.auth" 时才可在模板上下文中使用。有关更多信息,请参阅RequestContext docs。

    【讨论】:

      【解决方案2】:

      请提供访问此模板的views.py 的代码。但如果我的猜测是正确的,您可能不会将 user 实例传递给模板。

      在缺少特定变量的情况下,Django 模板将其视为 False。

      你需要这样做 -

      ...
      var  = RequestContext(request,'somevar':somevar})
      return render_to_response('somehtml.html', var)
      

      【讨论】:

        【解决方案3】:

        “用户”的值不在您的上下文中。通用视图,如标准登录,已经传递了一个 RequestContext 实例。

        您需要create your own,然后在渲染模板时传递该字典实例。通用视图会自动执行此操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-13
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 2011-01-22
          • 2011-03-17
          • 2012-02-25
          • 1970-01-01
          相关资源
          最近更新 更多