2016-11-06 3 views
0

В views.py у меня есть:Джанго: пытается передать пользователям первое имя в шаблоне, но получить странный код вместо

def loggedin(request): 
    return render_to_response('theDB/loggedin.html', {'first_name': User.first_name }) 

В loggedin.html у меня есть:

<h2>Hi {{ first_name }} you are now logged in!</h2> 
<p>Click <a href="/accounts/logout/">here</a> to logout.</p>" 

Это то, что я могу найти в браузере:

Hi "<"django.db.models.query_utils.DeferredAttribute object at 0x0000019FD7AA7AC8> you are now logged in! 
Click here to logout. 

Вместо того, чтобы видеть имя пользователя, я вижу, что странная вещь (объект юникода?)

ответ

3

User класс модели, не вошедшего в систему пользователя. На ваш взгляд, вы можете использовать request.user.

def loggedin(request): 
    return render(request, 'theDB/loggedin.html', {'first_name': request.user.first_name) 

Примечание Я использовал render ярлык, который рекомендуется вместо render_to_response.

+0

Спасибо, я сделал точно так, как указано, но получил следующую ошибку: объект «AnonymousUser» не имеет атрибута «first_name» – goobber

+0

Если 'request.user' является' AnonymousUser', это означает, что вы не вошли в систему. Обычно, вы должны использовать декоратор ['login_required'] (https://docs.djangoproject.com/en/1.10/topics/auth/default/#the-login-required-decorator), чтобы пользователи не могли получить доступ к представлению, если они не имеют вошел в систему. – Alasdair

+0

Я обновил вопрос с дополнительной информацией. У меня есть это для входа в систему пользователя: def my_view (request): username = request.POST ['username'] password = request.POST ['password'] user = authenticate (username = имя пользователя, пароль = пароль) '', если пользователь не является None: '' 'if user.is_active: ' '' login (request, user) '' '# Перенаправить на страницу успеха, которая является DB/loggedin.html else ... так как я перенаправить на loggedin.html, не означает ли это, что логин был успешным? – goobber