133π
An alternate method for current Django versions:
{% if user.is_authenticated %}
<p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
Note:
- Use
request.user.get_username()
in views &user.get_username
in templates. Preferred over referringusername
attribute directly. Source - This template context variable is available if a RequestContext is used.
django.contrib.auth.context_processors.auth
is enabled by default & contains the variable user- You do NOT need to enable
django.core.context_processors.request
template context processor.
Source : https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates
46π
{% if request.user.is_authenticated %}Welcome '{{ request.user.username }}'
{% else %}<a href="{% url django.contrib.auth.login %}">Login</a>{% endif %}
and make sure you have the request
template context processor installed in your settings.py
:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)
- [Django]-Separation of business logic and data access in django
- [Django]-Is there a way to negate a boolean returned to variable?
- [Django]-Django dynamic forms β on-the-fly field population?
40π
As per the question title, the following may come handy to someone. used the followings in my template:
Username: {{ user.username }}
User Full name: {{ user.get_full_name }}
User Group: {{ user.groups.all.0 }}
Email: {{ user.email }}
Session Started at: {{ user.last_login }}
Thanks π
- [Django]-Why is __init__ module in django project loaded twice
- [Django]-Sorting related items in a Django template
- [Django]-405 "Method POST is not allowed" in Django REST framework
2π
Firstly, First, if your fields changed their name, you must overwrite the functions (get_full_name(), get_short_name(), etc), in this way:
def get_full_name(self):
return self.names + ' ' + self.lastnames
def get_short_name(self):
return self.names
In the template, you can show it this way
{% if user.is_authenticated %}
<strong>{{ user.get_short_name }}</strong>
{% endif %}
these are the methods in authentication https://docs.djangoproject.com/es/2.1/topics/auth/customizing/
- [Django]-How to customize user profile when using django-allauth
- [Django]-How to use MySQLdb with Python and Django in OSX 10.6?
- [Django]-Catching DoesNotExist exception in a custom manager in Django
0π
The following is a full working solution that takes also translations into consideration:
template.html
:
{% blocktrans %}Welcome {{ USER_NAME }}!{% endblocktrans %}
context_processors.py
:
def template_constants(request):
return {
'USER_NAME': '' if request.user.is_anonymous else request.user.first_name,
# other values here...
}
Remind to set your custom context_processors correctly in the settings.py
:
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'your_app.context_processors.template_constants',
],
},
},
]
And this is what you get in the django.po
:
#: templates/home.html:11
#, python-format
msgid "Hi %(USER_NAME)s!"
msgstr "..."
A good practice is to keep the logic outside the templates: for this purpose you can easily customize the username displayed directly in the context_processors.py
.
- [Django]-Can you give a Django app a verbose name for use throughout the admin?
- [Django]-Unresolved attribute reference 'objects' for class '' in PyCharm
- [Django]-How to change site title, site header and index title in Django Admin?