Django模板:如果用户属于多个组,则仅显示一次链接

时间:2017-09-04 08:33:03

标签: html django python-2.7 django-templates

我在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次​​。

有没有办法只展示一次?

2 个答案:

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