我在template
中有django
,如果用户的群组名称与患者不同,则会显示一个链接。
我的代码是:
{% if user.is_authenticated %}
{% for group in user.groups.all %}
{% if group.name != 'Patient' %}
<li {% if request.get_full_path == modules_url %} class="active" {% else%} class="inactive"{% endif %}>
<a href="{% url 'modules' %}"><b style="color:#ff9904;">Modules</b></a>
</li>
{% endif %}
{% endfor %}
{% endif %}
如果用户是四个不同群组的成员,则链接Modules
会在模板中显示4次。
有没有办法只展示一次?
答案 0 :(得分:1)
我认为使用templatetags的句柄应该更容易。
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):
"""
{% if request.user|has_group:'grouName' %}
{# do_stuff #}
{% endif %}
return Boolean (True/False)
"""
group = Group.objects.get(name=group_name)
return group in user.groups.all()
基本上你也可以用这个来获得第一组:
{% if user.groups.all.0 == 'Patient' %}
...
{% endif %}
答案 1 :(得分:0)
我感谢here找到了解决方案。我使用了forloop.counter
变量。
{% if user.is_authenticated %}
{% for group in user.groups.all %}
{% if group.name != 'Patient' %}
{% if forloop.counter < 2 %}
<li {% if request.get_full_path == modules_url %} class="active" {% else%} class="inactive"{% endif %}>
<a href="{% url 'modules' %}"><b style="color:#ff9904;">Modules</b></a>
</li>
{% endif %}
{% endif %}
{% endfor %}
{% endif %}