djangodjango-modelsdjango-formsdjango-templatesdjango-users

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?


Solution

  • 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 }}