【问题标题】:Django user.is_authenticated works some places, not othersDjango user.is_authenticated 在某些地方有效,在其他地方无效
【发布时间】:2011-03-21 05:27:25
【问题描述】:

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

        <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>

它似乎工作正常,除非创建的页面有 @login_required 装饰器,在这种情况下页面工作正常,但导航看起来好像用户没有登录,即使他们已经登录。

【问题讨论】:

    标签: django django-users


    【解决方案1】:

    继续 Gabriel 的回答,user 变量是否来自 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))
    

    【讨论】:

    • 也是一个很好的观点。我正要添加关于上下文处理器和 RequestContext 的注释。
    • 我也遇到了这个问题:正确登录后,我重定向到主页,该视图返回 render_to_response('myapp/shop_list.html', {'shop': entry_list,}, context_instance=RequestContext (request)) 但是,此时,request.user 是 AnonymusUser,因此当主页模板加载时,user.is_authenticated 始终为 false。我会错过什么?
    • 听起来您的登录无效。如果您将print request.user 添加到您的主页视图中,您是否获得了您期望的用户?如果这没有帮助,请提出一个新问题,而不是在此处添加 cmets - 没有多少人会阅读这些 cmets,因此您不会得到任何帮助。
    【解决方案2】:

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

    确实可以访问request.user,但在从具有@login_required 装饰器的视图呈现的模板中,这将始终返回true。

    我可以肯定地告诉你装饰器没有问题的原因是,在UserAnonymousUser(位于django.contrib.auth.models)的代码中,is_authenticated 方法严格返回 true UserAnonymousUser 为假。装饰器不会也不能改变它。这意味着您的模板实际上并没有获得您正在检查userUser 对象。

    【讨论】:

    • 啊!完美的。正如你所说,我根本没有让用户通过。但是对于其他人(因为它让我感到困惑),你不能在模板中使用“request.user”,你需要在你的渲染中通过用户来响应:'user':request.user,再次感谢。
    • 查看 Alasdair 的回答以获取更多信息以回应您的评论。
    猜你喜欢
    • 2017-04-05
    • 2020-02-23
    • 1970-01-01
    • 2017-05-23
    • 2014-09-05
    • 2014-02-06
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多