我尝试制作它,以便只有当用户属于某个群组或是管理员时才能查看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模块执行此操作会有问题。
答案 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 %}