2017-02-09 64 views
0

我在做什麼錯了?我只想要用戶的用戶名。我登錄,所以我不知道爲什麼它不工作。使用django.contrib.auth無法在模板中獲取用戶

views.py

from django.contrib.auth.models import User 

def check_user(request): 
    data = dict() 
    user = User.objects.all() 
    data['user'] = user 
    return render(request, 'check_user.html', data) 

urls.py

url(r'^check_user/$', views.check_user, name='check_user'), 

check_user.html

{{ request.user.is_authenticated }} 

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 
{% else %} 
    <p>Welcome, new user. Please log in.</p> 
{% endif %} 

而且我得到這個:

CallableBool(True) 

Welcome, new user. Please log in. 

當我應該得到:

Welcome, admin. Thanks for logging in. 

如果我使用:{%如果request.user.is_authenticated%},而不是{%如果user.is_authenticated%}我得到這個:

Welcome, . Thanks for logging in. 

回答

2

你的問題是,在你看來,你並不需要創建數據[「用戶」]。因爲在模板中,Django已經傳遞了模板變量{{ user }}

因此,在您的視圖中刪除此數據字典,並保持當前上下文,無需修改。

def check_user(request): 
    return render(request, 'check_user.html', {}) 

而你的模板將工作。 (並不需要改變的東西)

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 
{% else %} 
    <p>Welcome, new user. Please log in.</p> 
{% endif %} 

https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

+0

Ooooh所以我不需要傳遞User.objects。all()attall,因爲它在模板中自動實現? –

+0

如果您需要所有用戶的列表,那麼您需要。但是,在這裏,您要求提供請求該頁面的當前用戶的用戶名?對 ? – Wilfried

+0

是的,謝謝。 –

2

user是模板中的queryset對象,換句話說,它是用戶列表,而不是單個用戶。 如果需要當前用戶使用這樣的:

{% if request.user.is_authenticated %} 
    <p>Welcome, {{ request.user.username }}. Thanks for logging in.</p> 

代替

{% if user.is_authenticated %} 
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p> 

UPDATE

由於維爾弗裏德在他的回答和評論說,這是不是覆蓋可變user好的做法在模板中。所以,如果你需要考慮到用戶的列表,將是更好的情境變量重命名爲users

users = User.objects.all() 
data['users'] = users 
+0

我使用的,但我忘了寫,如果我使用我得到這個:歡迎。感謝您登錄。 –

+0

@NitaAlexandru您是否也更改了'

歡迎,{{request.user.username}}。感謝登錄。

'部分? – neverwalkaloner

+0

啊不讓我試試 –

相關問題