检查Django用户组

时间:2017-06-13 10:46:03

标签: django

所以我想根据用户所在的组更改显示的信息。

所以:

{% if user.is_staff %} 
......

这有效,但是当我尝试做的时候

{% if user.is_China %}

这个小组不起作用?

我是否需要做一些特定的事情来确定用户是否属于某个群组?

2 个答案:

答案 0 :(得分:2)

您可能需要的是自定义模板标记:

from django import template
from django.contrib.auth.models import Group 

register = template.Library() 

@register.filter(name='is_group') 
def is_group(user, group_name):
    group =  Group.objects.get(name=group_name) 
    return group in user.groups.all() 

在你的模板中:

{% if user|is_group:"group" %} 
    <p>User belongs to group 
{% else %}
    <p>User doesn't belong to group</p>
{% endif %}

答案 1 :(得分:1)

Fazil Zaid答案的唯一注意事项是,如果group_name找不到任何组,则会引发 Group.DoesNotExist 异常。在我看来,如果组不存在,最好处理此异常并返回 False

@register.filter(name='is_group') 
def is_group(user, group_name):
    try:
        group =  Group.objects.get(name=group_name) 
        return group in user.groups.all() 
    except Group.DoesNotExist:
        return False

有关异常的详细信息,请参阅https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model.DoesNotExist