我需要在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 %}
答案 0 :(得分:1)
对于正确的数字,此部分的评估结果为真:
{% if forloop.counter ==1 or forloop.counter|divisibleby:4 %}
当计数器为1,4,8,12等时,这将被评估为真。不是每3个数字,而是每4个数字。
相反,请使用forloop.counter0
,如下所示:
{%if forloop.counter0 | divisibleby:3%}
forloop.counter0
从0开始,所以它可以在0,3,6,9等处被3整除,就像你想要的那样。
您的代码还有另一个问题:
{% if forloop.counter|divisibleby:4 %}
</tr>
{% endif %}
</tr>
如果您只想在每第三个元素后关闭标记,则删除if条件之外的标记。
此外,您还要在错误的部分添加结束标记。在你再次打开标签之前它应该是一个元素,所以在第3个元素,第6个元素等等。
为此,您仍然可以使用forloop.counter
,如此:
{% 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个,只需将for {{1>}标记替换为forloop
</tr>
如果在for循环的最后一次迭代中添加了{% if not nbr|divisibleby:3 %}
</tr>
{% endif %}
,那么你将不会有两个</tr>
。
答案 1 :(得分:1)
所以这是因为如果forloop计数器可被4整除,则插入<tr>
AND </tr>
。如果forloop计数器为1,则还插入<tr>
。所以第一行工作时,第二行将插入开始和结束标记(因为forloop计数器仍可被4整除)。你的逻辑已关闭。
我想你想要:
<table>
{% for items in range(5) %}
{% if forloop.counter == 1 %}
<tr>
{% endif %}
<td>name</td>
{% if forloop.counter|divisibleby:4 %}
</tr><tr>
{% endif %}
{% endfor %}
</tr>
</table>