在我base.html文件的文件,我使用
{% if user.is_authenticated %}
<a href="#">{{user.username}}</a>
{% else %} <a href="/acc/login/">log in</a>
這裏,即使用戶登錄,登錄按鈕顯示出來。Django的認證
現在,當我點擊log in
鏈接,它顯示的用戶名,也是正常登錄觀點,他說用戶已登錄。
那麼,什麼是錯的?
在我base.html文件的文件,我使用
{% if user.is_authenticated %}
<a href="#">{{user.username}}</a>
{% else %} <a href="/acc/login/">log in</a>
這裏,即使用戶登錄,登錄按鈕顯示出來。Django的認證
現在,當我點擊log in
鏈接,它顯示的用戶名,也是正常登錄觀點,他說用戶已登錄。
那麼,什麼是錯的?
聽起來就像你沒有在你的模板中得到任何用戶信息。你在你的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))
我相信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, ...)
感謝,多米尼克R.一兩件事,所以,我需要包括'在我所有的意見context_instance',如果我需要經常做此(如在頭中顯示「登錄」信息)?如果我總是想要做這件事,沒有更好的方法來做到這一點。我希望我很清楚。 – zubinmehta 2010-05-17 10:43:44
@webvulture - 看看django-annoying(看我的編輯)。我知道關於'render_to'裝飾器是否邪惡的觀點各不相同,但我傾向於認爲它很有用。如果您的視圖*除了呈現給該模板以外,不會使用它*。 – 2010-05-17 10:47:22