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

问题描述 投票:0回答:3

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

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

你会怎样做?

django django-models django-forms django-templates django-users
3个回答
124
投票

查看 is_superuser

 对象上的 
User

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

编辑:@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 }}
 访问用户
    


21
投票
正如评论中所讨论的,您可以使用模板中自动提供的

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

,这可能更合适。


0
投票
实际上,当您尝试检查登录 html 模板天气用户是否是超级用户时,您将无法执行此操作,因为在这种情况下,它将是错误的,您可以在views.py 文件中检查用户是否是超级用户或不,然后将其重定向到您想要的任何地方。

you can do some thing like this as you can see in start function

© www.soinside.com 2019 - 2024. All rights reserved.