Python 仅当未插入时插入分隔符’;不要在前面插入一个

Python 仅当未插入时插入分隔符’;不要在前面插入一个,python,django,django-templates,Python,Django,Django Templates,我有一个模板变量product\u list,它是product对象的QuerySet产品对象依次具有一对多的轨迹对象字段(当然,从轨迹反向映射),该字段可能为空。我想创建一个Tracks列表,按Products分组,如下所示: {% for product in product_list %} {% if this is not the first product with tracks %} <li class="separator"></li>

我有一个模板变量
product\u list
,它是
product
对象的
QuerySet
<代码>产品对象依次具有一对多的
轨迹
对象字段(当然,从
轨迹
反向映射),该字段可能为空。我想创建一个
Track
s列表,按
Product
s分组,如下所示:

{% for product in product_list %}
    {% if this is not the first product with tracks %}
        <li class="separator"></li>
    {% endif %}

    {% for track in product.tracks %}
        <li>{{track}}</li>
    {% endfor %}
{% endfor %}
track_list = Track.objects.order_by('product__name')

所以我确实可以使用
ifchanged
。在我的情况下,这是可行的,但我仍然对第一种方法的解决方案感兴趣。

您应该编写条件。看起来很简单,也许这不是你想要的

{% for product in product_list %}
    {% if not forloop.first and product.tracks %}
        <li class="separator"></li>
    {% endif %}

    {% for track in product.tracks %}
        <li>{{track}}</li>
    {% endfor %}
{% endfor %}

它不是一个视图,而是一个模板上下文处理器,它添加了变量,但是是的,是烹饪方法赢得了胜利。我仍在测量在高负载时这是否足够快,但它似乎工作正常。对不起,我在度假。我采取了第二种方法,预先整理我的数据;似乎仅使用模板逻辑无法解决此问题。忘记添加烹饪方法(在视图或上下文处理器中):
product\u list.filter(tracks\u isnull=False)。distinct()
<需要code>distinct(),因为如果没有它,产品将作为时间出现在查询集中。
{% for product in product_list %}
    {% if product.should_have_separator %}
        <li class="separator"></li>
    {% endif %}

    {% for track in product.tracks %}
        <li>{{track}}</li>
    {% endfor %}
{% endfor %}
product_list = Product.objects.....
is_the_first_product = True
for product in product_list:
    is_the_first_product_with_tracks = ( is_the_first_product 
                                        and bool( product.tracks ) )
    product.should_have_separator = not is_the_first_product_with_tracks
    is_the_first_product = False