Django模板中的条件计数器循环
Posted
技术标签:
【中文标题】Django模板中的条件计数器循环【英文标题】:Conditional Counter in Django template for loops 【发布时间】:2021-05-07 14:58:06 【问题描述】:我希望我的 for 循环在 if 条件满足三次后结束,同时在我的电子商务网站中呈现我的“产品”详细信息。
category.html
% for item in subcategory %
% with counter="0" %
<div>
<h5 class="my-0" style="font-weight: 700;"> item.title </h3>
</div>
<div class="row">
% for i in products %
% if i.category.id == item.id %
counter|add:"1"
% if counter == "3" %
break
% endif %
<div class="col-3 p-0 px-1 my-3">
<a href="% url 'product_detail' i.id i.slug %">
<img class="w-100" id="catbox" src=" i.image.url " >
</a>
</div>
% endif %
% endfor %
<div class="col-3 p-0 my-3 text-center"
style="border-radius: 10px;background: url(% static 'images/temp.jpeg' %); background-size: cover;">
<div class="h-100 w-100 m-0 p-0" style="background: rgba(0, 0, 0, 0.61);border-radius: 10px;">
<div style="position: relative;top: 50%;transform: translateY(-50%);">
<a href="% url 'category_product' item.id item.slug %" class="text-white " href="#"><strong>SEE
ALL</strong></a>
</div>
</div>
</div>
</div>
% endwith %
% endfor %
我希望第二个 for 循环,即 % for i in products %
,一旦满足 if 条件,即其中的 % if i.category.id == item.id %
,就中断 三次。但是我设置为 0 的计数器会重复递增到 1,而不是使用 for 循环重复递增。由于里面有一个 if 条件,我也不能使用 forloop.counter 。
我希望对第一个 for 循环的每次迭代重复此过程,即 % for item in subcategory %
【问题讨论】:
【参考方案1】:不存在用于中断(或在 python 中继续)目的的模板标签。发送未经处理的数据并在模板中工作通常是一种不好的做法。我认为首先您需要根据视图中的条件制作一个列表,然后将其传递给模板以使用它们。 但是,你可以做一件事(在我看来效率很低),
% if counter <= 3 %
do the job which you meant to do before breaking
% endif %
或者您可以尝试创建自己的模板标签/过滤器。但我建议你在模板中保持简单,在视图中弄乱它。 view docs for template tags
【讨论】:
还有如何声明和增加计数器? counter|add:"1" 将 1 加到 counter 并使其值从 0 到 1 重复,而不是随着 for 循环的迭代而不断增加 counter 的值。 对不起,我忘记了,通常情况下,你不能这样做。为此,您必须声明一个非常简单的自定义模板标签。在这里你会得到一个例子:see this【参考方案2】:您不需要自己定义计数器并使用'with'标签。您可以使用 django 内置计数器进行循环。您可以像这样在 for 循环中访问计数器: forloop.counter
从 1 开始, forloop.counter0
从 0 开始。您还可以像这样访问外部 for 循环计数器的计数器:forloop.parentloop.counter/counter0
check @ 987654321@
【讨论】:
是的,我知道这个。但我有很多“产品”,其中,我只想展示 3 个满足上述 if 条件的产品。如果我使用 forloop.counter 它只会计算“产品”的数量,而不是满足 if 条件的“产品”数量。添加到它,我怎样才能打破 Django 模板中的 for 循环?以上是关于Django模板中的条件计数器循环的主要内容,如果未能解决你的问题,请参考以下文章