Django模板标记 - 在嵌套for循环中仅显示一个值

时间:2017-09-07 04:57:37

标签: django django-templates

我正在开发一个Django网络应用,并有以下查询:

我有一个名为'AppQoSList'的模型,它列出了所有用户都可以使用的应用程序。

我有另一个名为'BasicAppSDWANProfiles'的模型,它与'AppQoSList'有一个ManyToMany关系。

简而言之,这意味着用户可以将多个“BasicAppSDWANProfiles”与其帐户相关联,并且多个AppQoS可以位于特定的BasicAppSDWANProfiles中:

class AppQoSList(models.Model):

    app_qos_name = models.CharField(max_length=50, blank=None, null=True)
    app_qos_description = models.CharField(max_length=500)

    def __str__(self):
        return u'%s' % self.app_qos_name


class BasicAppSDWANProfiles(models.Model):
    profile_name = models.CharField(max_length=30)
    profile_basic_app_qos = models.ManyToManyField(AppQoSList)
    tenant_id = models.ForeignKey(Tenant, default=3)

当我尝试显示可用的应用列表和相关的BasicAppSDWANProfile时,我在模板中遇到问题:

{%  for app in apps %}
     {% for profile_app in sdwan_prof %}
        {% for specific_app in profile_app.profile_basic_app_qos.all %}
                {% ifchanged specific_app.pk %}
                    {% if app.pk == specific_app.pk %}
          <td><h4><span class="label label-primary">{{ profile_app.profile_name }}</span></h4></td>
                    {% else %}
         <td><h4><span class="label label-warning">Not Assigned</span></h4></td>
                    {% endif %}
                 {% endifchanged %}
         {% endfor %}
     {% endfor %}

  {% endfor %}

此代码的问题是每行显示“未分配”6次(对应于与此用户关联的BasicAppSDWANProfiles中找到的应用程序数),而我只想显示一次:

Table Visual

你能解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。

首先,我清理了我的观看代码,以删除重复的“未分配”#39;值。

我向我的模板上下文传递一个字典,其中只包含分配了个人资料的应用,如下所示:

{'citrix-static': 'DPS-BLACKLIST',
 'exchange': 'DPS-BLACKLIST',
 'ms-lync-audio': 'DPS-WHITELIST',
 'ms-update': 'DPS-GREYLIST',
 'rtp': 'DPS-WHITELIST',
 'share-point': 'DPS-WHITELIST'}

在我的模板中,我只遍历这个词典:

               {% for k,v in app_prof_assign.items %}

                      {% if app.app_qos_name == k %}

                <td><h4><span class="label label-primary">{{ v }}</span></h4></td>

                    {% endif %}

                {% endfor %}

然后,我只是检查应用程序是否不在个人资料词典中,循环之外:

    {%  if app.app_qos_name not in app_prof_assign %}
  <td><h4><span class="label label-warning">Not Assigned</span></h4></td>
    {% endif %}

最后,我可以按预期填充表格:

enter image description here