base.html无法访问{%if user.is_authenticated%}

时间:2014-11-24 12:57:52

标签: python django

在我的base.html中,user.is_authenticated始终返回false ...

我希望基本模板在登录和退出'

之间切换

帮助将非常感激


base.html文件

<div id="leftsidebar">
        {% block leftsidebar %}
            {% if user.is_authenticated %}
                <p><a href="/logout/">logout</a></p>
            {% else %}
                <p><a href="/login/">Login</a></p>
            {% endif %}
        {% endblock %}
</div> <!-- end leftsidebar -->

forms.py

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from drinker.models import Drinker
from django.contrib.auth import authenticate, login, logout

class LoginForm(forms.Form):
    username        = forms.CharField(max_length=255, required=True, label=(u'User Name'))
    password        = forms.CharField(max_length=255, required=True, label=(u'Password'), widget= forms.PasswordInput(render_value=False))

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from drinker.forms import RegistrationForm, LoginForm
from django.contrib.auth.models import User
from drinker.models import Drinker
from django.contrib.auth import authenticate, login, logout

def ProfileRequest(request):
        if request.user.is_authenticated():
                return render_to_response('profile.html')
        else:
                return render_to_response('/', {'user': request.user.username})

3 个答案:

答案 0 :(得分:4)

当用户通过身份验证时,您不会在上下文中传递任何内容,因此{{ user }}为空。您可以在上下文字典中显式传递它,即第二个参数,但更好的做法是使用上下文处理器自动执行此操作:只有在使用RequestContext时才会运行。

有一条快捷方式可以帮到您:

from django.shortcuts import render

...
return render(request, 'profile.html', {})

另请注意那里的else语句没有意义:如果用户未经过身份验证,则不会有用户名。

答案 1 :(得分:1)

使用{%if request.user.is_authenticated%}代替{%if user.is_authenticated%}。

您的模板只知道您在上下文中传递给它的变量加上请求。

答案 2 :(得分:0)

我的逻辑是错误的,有了else语句,

else永远不会将用户传递给模板,因为它始终经过身份验证:P

def ProfileRequest(request):
        if request.user.is_authenticated():
                return render_to_response('profile.html')
        else:
                return render_to_response('/', {'user': request.user.username})

在下面更正了视图定义

def ProfileRequest(request):
        if request.user.is_authenticated():
                return render(request, 'profile.html', {})

加上我必须正确使用渲染(非常感谢Daniel Roseman :))