Django user.is_authenticated在某些地方工作,而不是其他地方

Mic*_*isy 5 django django-users

在我的模板中,我有以下内容:

        <ul class="tabbed" id="network-tabs">
            {% if user.is_authenticated %}
            <li><a href="{% url acct-my-profile %}">My Account</a></li>
            <li><a href="{% url acct-logout %}">Log Out</a></li>
            {% else %}
            <li><a href="{% url acct-login %}">Log in</a></li>
            <li><a href="{% url acct-register %}">Register</a></li>
            {% endif %}
        </ul>
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,除非创建的页面有一个@login_required装饰器,在这种情况下页面工作正常,但导航显示就好像用户没有登录,即使它们是.

Gab*_*ley 13

您应该检查您的视图函数以查看user变量的来源.除非你专门user从视图中传入上下文,否则这就是你的问题.

但是,您确实可以访问request.user,并且在从具有@login_required装饰器的视图渲染的模板中始终返回true .

我可以告诉你确定装饰器没有任何问题的原因是,在方法的代码UserAnonymousUser(位于django.contrib.auth.models)中is_authenticated严格返回true User和false AnonymousUser.装饰者不会也不能改变它.这意味着你的模板实际上并没有得到User你正在检查的对象user.

  • 啊! 完善.就像你说的那样,我根本没有通过用户.但对于其他人(因为它让我感到困惑),你不能在模板中使用"request.user",你需要在渲染中传递用户响应,如:'user':request.user,再次感谢. (8认同)

Ala*_*air 8

user接下来是Gabriel的回答,变量来自auth上下文处理器吗?如果是,并且您正在使用render_to_response快捷方式,则需要使用RequestContext实例.

from django.template import RequestContext

...

@login_required
def some_view(request):
    # ...
    return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)