允许某些组和管理员在 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 %}
我正在努力使 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 %}