2014-11-24 61 views
1

在我base.html文件user.is_authenticated總是返回false ...base.html文件無法訪問{%如果user.is_authenticated%}

我想要的基本模板之間切換「登錄和註銷」

的幫助會非常讚賞


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

回答

4

你當用戶進行身份驗證您還沒有在上下文遞東西,所以{{ user }}是空的。你可以在上下文字典中明確地傳遞它,也就是第二個參數,但是更好的做法是使用上下文處理器自動執行它們:只有在使用RequestContext時纔會運行。

有一個快捷方式,爲你做這個:

from django.shortcuts import render 

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

還要注意else語句存在是沒有意義的:如果用戶沒有通過驗證,就沒有用戶名。

0

我的邏輯是錯誤的通過具有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', {}) 

加我不得不使用渲染正確(非常感謝你對丹尼爾羅斯曼:))

1

使用{%if request.user.is_authenticated%}而不是{%if user.is_authenticated%}。

您的模板只知道您在上下文中傳遞給它的變量以及請求。