【发布时间】:2012-04-21 09:09:15
【问题描述】:
如何让模板/视图识别登录用户是否是超级用户?
如果用户不是超级用户,我希望完全隐藏我的表单(在模板中)上的某些按钮
你会怎么做呢?
【问题讨论】:
标签: django django-models django-forms django-templates django-users
如何让模板/视图识别登录用户是否是超级用户?
如果用户不是超级用户,我希望完全隐藏我的表单(在模板中)上的某些按钮
你会怎么做呢?
【问题讨论】:
标签: django django-models django-forms django-templates django-users
实际上,当您尝试检查登录 html 模板天气时,用户是否是超级用户,您将无法做到这一点,因为在那种情况下,您可以在 views.py 文件中检查该用户是是否超级,然后将其重定向到您想要的任何地方。 you can do some thing like this as you can see in start function
【讨论】:
如 cmets 中所述,您可以使用模板中自动提供的 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 对象上查看is_superuser:
{% if request.user.is_superuser %}
...
<button>...</button>
...
{% else %}
...
{% endif %}
编辑:@mustafa-0x cmets 之后
以上假设您的TEMPLATE_CONTEXT_PROCESSORS 设置中包含django.core.context_processors.request这不是默认设置。
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 }} 访问上述用户
【讨论】:
user 对象通常可以通过request 访问——您删除了request,这意味着需要将user 对象添加到视图的上下文中,这对于大多数人来说都是浪费的无论如何请求。至于链接,你是对的,它不起作用。我已经更新了。
request 对象,而是假设您在呈现模板之前已在视图中添加了user 对象。我不想做出这样的假设并使用request 对象。没有对错,所以请不要再挑拨离间了