我做错了什么?我只想要用户的用户名。我被记录了所以我不知道它为什么不起作用。
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.
如果我使用:{%if request.user.is_authenticated%}而不是{%if user.is_authenticated%}我得到了这个:
Welcome, . Thanks for logging in.
答案 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>
<强>更新强>
正如威尔弗里德在回答和评论中所说,在模板中覆盖变量user
并不是一个好习惯。因此,如果您需要视图中的用户列表,最好将上下文变量重命名为users
:
users = User.objects.all()
data['users'] = users
答案 1 :(得分:2)
您的问题在您看来,您不需要创建数据['user']。因为在模板中,Django已经传递了模板变量{{ user }}
。
因此,在您的视图中删除此数据dict,并保留当前上下文,而不进行修改。
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