我正在尝试使用HTML标记获取Django用户组。这就是我试过的:
{% ifequal user.groups.all.0 'ABC' %}
{% endif %}
但这不起作用。还有什么其他方式?
答案 0 :(得分:1)
我认为你必须在这里使用一点Python。例如,custom template tag:
@register.filter(name='has_group')
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
在你的模板中:
{% if request.user|has_group:"ABC" %}
...
{% endif %}
(资料来源:http://www.abidibo.net/blog/2014/05/22/check-if-user-belongs-group-django-templates/)
但也许你应该在这里使用权限。
https://docs.djangoproject.com/en/1.8/topics/auth/default/#authentication-data-in-templates
编辑:以下是自定义模板代码的更完整示例:
settings.py:
INSTALLED_APPS = [
...
'yourapp',
...
]
文件系统:
yourproject/
manage.py
yourproject/
settings.py
wsgi.py
...
yourapp/
__init__.py
templatetags/
__init__.py
yourapp_extras.py
...
yourapp_extras.py:
from django import template
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
模板:
{% load yourapp_extras %}
{% if request.user|has_group:"ABC" %}
...
{% endif %}
为了更全面地了解这一点,我强烈建议您阅读Django的优秀文档。
答案 1 :(得分:0)
试试这个:
{% for group in request.user.groups.all %}
{% if group.name == 'ABC' %}{% endif %}
{% endfor %}
或者
{% if request.user.groups.all.0.name == 'ABC' %}{% endif %}
您必须从请求上下文变量访问当前用户对象。为此,请确保django.template.context_processors.request
位于模板设置中。
request.user.groups.all.0
会返回一个Group模型对象,因此您必须与name
字段进行比较。
答案 2 :(得分:0)
<h1>{{ user.groups.all.0 }}</h1>
{% if user.groups.all.0.name == 'Team2' %}
<h1>YES</h1>
{% else %}
<h1>NO</h1>
{% endif %}
此处,user.groups.all.0为您提供分配给该用户的第一个组。
例如。如果登录用户将组分配给他 - 'Team2','Programmer','Beginner'。 然后{{user.groups.all.0}}将打印Team2。 我用它来打印并检查html模板中登录用户的组。
OR
{% if request.user|has_group:"mygroup" %}
<h1>Has group mygroup</h1>
{% endif %}
在django v1.11中也可以正常工作。这将检查当前用户是否分配了“mygroup”。 但是,您需要添加
from django import template
from django.contrib.auth.models import Group
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
return True if group in user.groups.all() else False
在下面的文件结构中的group_check.py中
--app
|templates
|templatetags
|-- group_check.py