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

Allow certain group and admin to view part of HTML in Django

我正在努力使 html 的特定部分仅在用户属于特定组或管理员时可见。我设法找到了一种方法,使它只有特定的组才能看到它:

base.html

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

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

您需要自定义模板标签:

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 %}