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