Django auth在模板中混淆

时间:2010-12-02 15:56:12

标签: django templates authentication

我正在玩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库似乎在其他地方正在执行其工作,我无法访问登录保护功能,并且我可以在登录后等。

谁能告诉我哪里出错?

3 个答案:

答案 0 :(得分:3)

来自the docs

  

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

答案 1 :(得分:1)

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

如果没有特定变量,Django Templates会将其视为False。

你需要这样做 -

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

答案 2 :(得分:1)

“user”的值不在您的上下文中。通用视图(如标准登录名)已经传递了RequestContext实例。

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