Django:如果用户不是超级用户,则隐藏模板中的按钮

Joh*_*ash 36 django django-templates django-models django-forms django-users

如何让您的模板/视图识别登录用户是否是超级用户?

我的表单(在模板中)有一些按钮,如果用户不是超级用户,我想要完全隐藏

你会怎么做呢?

Tim*_*ony 82

检查出is_superuser的上User对象:

{% if request.user.is_superuser %}
    ...
    <button>...</button>
    ...
{% else %}
...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

编辑:在@ 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',
)
Run Code Online (Sandbox Code Playgroud)

已经包含django.contrib.auth.context_processors.auth(并且特别是不包括request上下文处理器)意味着在大多数情况下,您将{{ user }}无需通过视图将其添加到您的上下文,或者允许request上下文处理器通过上述方式访问用户{{ request.user }}


shu*_*ckc 8

如评论中所述,您可以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 %}
Run Code Online (Sandbox Code Playgroud)

您也可以使用user.is_staff哪个更合适.