Django: Hide button in template, if user is not super-user
How do you get your template/view to recognize whether or not a logged in user is a super user or not?
There are certain buttons on my forms (in the template) that I want completely hidden if the user is not a super-user
How would you go about doing that?
Check out is_superuser
on the User
object:
{% if request.user.is_superuser %}
...
<button>...</button>
...
{% else %}
...
{% endif %}
EDIT: after @mustafa-0x comments
The above assumes that you have django.core.context_processors.request
included in your TEMPLATE_CONTEXT_PROCESSORS
setting which isn't the default.
The default setting for TEMPLATE_CONTEXT_PROCESSORS
:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
# 'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
)
already includes the django.contrib.auth.context_processors.auth
(and notably doesn't include the request
context processor) meaning that in most cases you will already have access to {{ user }}
without the need to add it to your context via the view, or enable the request
context processor to access the user as above via {{ request.user }}
As discussed in the comments, you can use the User
object that is available in templates automatically:
{% if user.is_superuser %}
<div class="alert alert-success" role="alert">
You are logged in as {{user.first_name}}, here are the
<a href="/admin/">admin pages</a> for changing content.
</div>
{% endif %}
You can also use user.is_staff
which might be more appropriate.