允许某些组和管理员在Django中查看部分HTML

时间:2017-09-09 16:39:53

标签: python html django admin usergroups

我尝试制作它,以便只有当用户属于某个群组或是管理员时才能查看html的某个部分。我设法找到了一种方法,只有某个群体才能看到它:

base.html文件

{% for group in user.groups.all %}
    {% if group.name == 'example' %}
        Insert html here
    {% endif %}
{% endfor %}

问题在于试图让管理员也能看到它。当我尝试将诸如request.user.is_staff之类的东西添加到if语句时,代码基本上只是忽略它。无论如何允许管理员看到这个HTML而不管组,而不必将管理员添加到组?此外,这是base.html,因此尝试使用Python模块执行此操作会有问题。

1 个答案:

答案 0 :(得分:0)

您需要自定义模板标记:

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 group in user.groups.all() 

在你的模板中:

{% if request.user|has_group:"moderator" and if request.user|has_group:"admin" %} 
    <p>User belongs to group moderator or admin</p>
{% else %}
    <p>User doesn't belong to moderator or admin</p>
{% endif %}