使用forloop在Django模板中创建自定义表

永远的守望者

我需要在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 %} 

但这显然不是正确的解决方案。更新:它生成如下所示的内容:输出每个图像都是td标签

Dietbacon

对于正确的数字,此部分未评估为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.counterlike,如下所示:

{% 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章