如何让你的模板/视图识别已登录用户是否为超级用户?
我的表单中有一些按钮(在模板中),如果用户不是超级用户,我希望这些按钮完全隐藏。
你会怎么做呢?
如何让你的模板/视图识别已登录用户是否为超级用户?
我的表单中有一些按钮(在模板中),如果用户不是超级用户,我希望这些按钮完全隐藏。
你会怎么做呢?
查看User
对象上的is_superuser
:
{% 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}}
访问用户,则需要启用request
上下文处理器。
如评论中所讨论的,您可以在模板中自动使用可用的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
,这可能更合适。
user
对象通常可以通过request
访问 - 你删除了request
,这意味着user
对象需要添加到视图的上下文中,这是浪费的,因为大多数人都会在请求中拥有它。至于链接,你是对的,它不起作用。我已经更新了它。 - Timmy O'Mahonyrequest
对象,而是假定您在呈现模板之前添加了user
对象。我不喜欢做那样的假设,我喜欢使用request
对象。没有对错之分,请不要试图挑起争论。 - Timmy O'Mahonyuser
在默认上下文,但是request
不在。另请参阅:https://dev59.com/vmLVa4cB1Zd3GeqPy7Rj#10158892 - mustafa.0xTEMPLATE_CONTEXT_PROCESSOR
设置文件中包括上下文处理器django.contrib.auth.context_processors.auth
,这意味着您确实可以访问user
对象(以及perms
和messages
),因为它们被透明地添加了进去。我习惯于始终包含自己的TEMPLATE_CONTEXT_PROCESSOR
,而不是使用默认的global_settings.py
值,所以我没有意识到默认设置。对不起。 - Timmy O'Mahony