5

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

        <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 装饰器,在这种情况下页面工作正常,但导航看起来好像用户没有登录,即使他们是。

4

2 回答 2

14

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

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

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

于 2010-07-26T21:03:02.560 回答
8

继续 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))
于 2010-07-26T22:29:21.880 回答