以HTML格式获取Django用户组

时间:2015-06-26 11:42:05

标签: html django

我正在尝试使用HTML标记获取Django用户组。这就是我试过的:

{% ifequal user.groups.all.0 'ABC' %}
{% endif %}

但这不起作用。还有什么其他方式?

3 个答案:

答案 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