Подтвердить что ты не робот

Django: скрыть кнопку в шаблоне, если пользователь не является суперпользователем

Как вы получаете свой шаблон/представление, чтобы узнать, является ли зарегистрированный пользователь суперпользователем или нет?

В моих формах (в шаблоне) есть определенные кнопки, которые я хочу полностью скрывать, если пользователь не является суперпользователем

Как бы вы это сделали?

4b9b3361

Ответ 1

Откажитесь от is_superuser объекта User:

{% if request.user.is_superuser %}
    ...
    <button>...</button>
    ...
{% else %}
...
{% endif %}

EDIT: после @mustafa-0x комментариев

Вышеупомянутое предполагает, что у вас django.core.context_processors.request включен в настройку TEMPLATE_CONTEXT_PROCESSORS , которая не является значением по умолчанию.

Значение по умолчанию для 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',
)

уже включает django.contrib.auth.context_processors.auth (и, в частности, не включает в себя контекстный процессор request), что означает, что в большинстве случаев у вас уже будет доступ к {{ user }} без необходимости добавлять его в свой контекст через представление, или включить контекстный процессор request для доступа к пользователю, как описано выше, через {{ request.user }}

Ответ 2

Как описано в комментариях, вы можете использовать объект User, который доступен в шаблонах автоматически:

{% 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 %}

Вы также можете использовать user.is_staff, который может быть более уместным.