Skip to main content
 首页 » 编程设计

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

2025年05月04日17tuyile006

在我的 base.html 中,user.is_authenticated 总是返回 false...

我希望基本模板在“登录和注销”之间切换

帮助将不胜感激


基础.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 --> 

表单.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)) 

View .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}) 

请您参考如下方法:

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

有一个快捷方式可以为您执行此操作:

from django.shortcuts import render 
 
... 
return render(request, 'profile.html', {}) 

另请注意,else 语句没有任何意义:如果用户未通过身份验证,则不会有用户名。