2010-05-16 69 views
2

在我base.html文件的文件,我使用
{% if user.is_authenticated %}
<a href="#">{{user.username}}</a>
{% else %} <a href="/acc/login/">log in</a>

這裏,即使用戶登錄,登錄按鈕顯示出來。Django的認證

現在,當我點擊log in鏈接,它顯示的用戶名,也是正常登錄觀點,他說用戶已登錄。

那麼,什麼是錯的?

回答

5

聽起來就像你沒有在你的模板中得到任何用戶信息。你在你的MIDDLEWARE_CLASSES設置需要'django.contrib.auth.middleware.AuthenticationMiddleware',並獲得美好的事物在上下文的模板,你需要做的:

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def my_view(request): 
    return render_to_response('my_template.html', 
           my_data_dictionary, 
           context_instance=RequestContext(request)) 

爲了節省您無處不在這樣做,可以考慮使用django-annoying'srender_to裝飾,而不是render_to_response

@render_to('template.html') 
def foo(request): 
    bar = Bar.object.all() 
    return {'bar': bar} 

# equals to 
def foo(request): 
    bar = Bar.object.all() 
    return render_to_response('template.html', 
           {'bar': bar}, 
           context_instance=RequestContext(request)) 
+0

感謝,多米尼克R.一兩件事,所以,我需要包括'在我所有的意見context_instance',如果我需要經常做此(如在頭中顯示「登錄」信息)?如果我總是想要做這件事,沒有更好的方法來做到這一點。我希望我很清楚。 – zubinmehta 2010-05-17 10:43:44

+0

@webvulture - 看看django-annoying(看我的編輯)。我知道關於'render_to'裝飾器是否邪惡的觀點各不相同,但我傾向於認爲它很有用。如果您的視圖*除了呈現給該模板以外,不會使用它*。 – 2010-05-17 10:47:22

1

我相信Dominic Rodger的答案解決了您的問題。只是想補充一點,我個人更喜歡進口direct_to_template,而不是render_to_response

from django.views.generic.simple import direct_to_template 
... 
return direct_to_template(request, 'my_template.html', my_data_dictionary) 

,但我想這只是口味的問題。在我的情況下,你還可以使用命名參數,而不是my_data_dictionary

return direct_to_template(request, 'template.html', foo=qux, bar=quux, ...)