In my view, I can print request.user.username, however in the template, {{request.user.username}} does not appear. To make this easy, I removed the logic from the function,
As mentioned in the documentation, authenticated user's object is stored within user
variable in templates. Mentioned documentation includes the following example:
When rendering a template
RequestContext
, the currently logged-in user, either aUser
instance or anAnonymousUser
instance, is stored in the template variable{{ user }}
:
{% if user.is_authenticated %}
Welcome, {{ user.get_username }}. Thanks for logging in.
{% else %}
Welcome, new user. Please log in.
{% endif %}
EDIT: Thanks to @buffer, who dug out this old answer, I have updated it with most recent state. When it was originally written, in less than a month after Django 1.4 (which was released at the end of March 2012), it was correct. But since Django 1.5, proper method to get username is to call get_username() on user model instance. This has been added due to ability to swap User
class (and have custom field as username).