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

时间:2012-04-08 19:20:20

标签: django django-models django-forms django-templates django-users

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

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

你会怎么做呢?

3 个答案:

答案 0 :(得分:78)

User对象上查看is_superuser

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

之后

编辑

以上假设您的django.core.context_processors.request设置中包含TEMPLATE_CONTEXT_PROCESSORS,这不是默认设置

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',
)

已经包含django.contrib.auth.context_processors.auth(特别是不包含request上下文处理器),这意味着在大多数情况下,您无需将其添加到{{ user }}即可访问request通过视图启用您的上下文,或通过{{ request.user }}

启用{{1}}上下文处理器以上述方式访问用户

答案 1 :(得分:6)

正如评论中所讨论的,您可以自动使用模板中提供的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,这可能更合适。

答案 2 :(得分:0)

实际上,当您尝试检查登录html模板天气是用户还是超级用户时,您将无法执行此操作,因为在那种情况下,它将是假的,您可以在用户所在的views.py文件中进行检查超级与否,然后将其重定向到您想要的任何位置。 you can do some thing like this as you can see in start function