【问题标题】:Check Django User Group检查 Django 用户组
【发布时间】:2017-11-15 02:29:15
【问题描述】:

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

所以:

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

这行得通,但是当我尝试这样做时

{% if user.is_China %}

这个组不工作了?

我需要做些什么来确定用户是否属于某个组?

【问题讨论】:

  • is_staff 是 django admin 模型用户的内置属性,is_china 不是。要使用 is_china,您需要一个自定义用户模型,您可以在其中定义 is_china 属性。

标签: django


【解决方案1】:

也许你需要一个自定义模板标签:

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 </p>
{% else %}
    <p> User doesn't belong to group </p>
{% endif %}

【讨论】:

【解决方案2】:

对 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

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2014-09-21
    • 2011-08-14
    • 2013-10-22
    • 2020-10-13
    • 2017-05-28
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多