我需要在Django模板中创建一个自定义表,如下所示:
<table>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
即我想在每3个td标签之后添加新的tr标签。我尝试使用{{forloop.counter | divisibleby:4}}应用逻辑。我尝试了如下所示的操作,但未产生预期的结果。
{% for items in range(5) %}
{% if forloop.counter ==1 or forloop.counter|divisibleby:4 %}\
<tr>
{% endif %}
<td>name</td>
{% if forloop.counter|divisibleby:4 %}
</tr>
{% endif %}
</tr>
{% endfor %}
对于正确的数字,此部分未评估为true:
{% if forloop.counter ==1 or forloop.counter|divisibleby:4 %}
当counter为1、4、8、12等时,这将评估为true。不是每3个数字,而是每4个数字。而是使用forloop.counter0
,如下所示:
{%forforloop.counter0 |可除数:3%}
forloop.counter0
从0开始,因此可以随意将其在0、3、6、9等处除以3。
您的代码还有另一个问题:
{% if forloop.counter|divisibleby:4 %}
</tr>
{% endif %}
</tr>
如果只希望在每个第三个元素后关闭标签,则除去if条件之外的那个标签。另外,您在错误的部分添加了结束标记。在再次打开标签之前,它应该是一个元素,因此在第3个元素,第6个元素等处。为此,您仍然可以使用forloop.counter
like,如下所示:
{% if forloop.counter|divisibleby:3 %}
</tr>
{% endif %}
总体而言,您的代码应如下所示:
{% for items in range(5) %}
{% if forloop.counter0|divisibleby:3 %}
<tr>
{% endif %}
<td>name</td>
{% if forloop.counter|divisibleby:3 %}
</tr>
{% endif %}
{% endfor %}
</tr>
如果您使用的nbr
项目数量未知,而不是5,则只需</tr>
将forloop之外的标签替换为
{% if not nbr|divisibleby:3 %}
</tr>
{% endif %}
因此,</tr>
如果在for循环的最后一次迭代中添加一个,则不会有两个s。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句