You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板forloop.counter0|divisibleby:3判断失效 3列表格布局错乱

问题根因

布局全乱是几个低级错误叠加逻辑漏洞导致的,和divisibleby过滤器本身没有关系:

  • 标签写反:初始代码里本该写</tr>闭合行的位置,写的是开标签<tr>,浏览器解析表格DOM的时候直接把结构冲烂了
  • 间隔列重复渲染:你给spacer列加了forloop.counter < 3的判断,等于循环前三次每次都插一个间隔列。要知道rowspan="0"的语义是从当前行开始跨表格所有剩余行,只需要渲染1次就够了,插3次直接让第一行多了2个多余列,整个表格列数完全对不上
  • 计数逻辑混乱:一会儿用从1开始计数的forloop.counter,一会儿用从0开始计数的forloop.counter0做整除判断,换行时机完全偏移,也没处理最后一行凑不够3个单元格的补位,表格结构天生残缺

你后面调整的版本出现空白、内容重复的问题,本质还是间隔列重复插入、硬塞空td没绑定对应数据导致的。

可直接复用的实现代码

不需要修改视图层逻辑,直接替换模板里的表格代码即可:

<table>
    <tr>
    {% for job in jobsite %}
        <td>
            {{ job.name }}<br/>
            {{ job.address }}<br/>
            {% if job.address_2 %}{{ job.address_2 }}<br/>{% endif %}
            {{ job.city }}, {{ job.state }} {{ job.zip }}
        </td>

        {# 间隔列只在第一个单元格后渲染1次,自动跨表格所有行 #}
        {% if forloop.first %}
        <td class="spacer" rowspan="0">&nbsp;</td>
        {% endif %}

        {# 每凑够3个业务单元格,且不是最后一条数据时,自动换行 #}
        {% if forloop.counter0|add:1|divisibleby:3 and not forloop.last %}
            </tr><tr>
        {% endif %}
    {% endfor %}

    {# 最后一行凑不够3个单元格时自动补空td,保证结构对齐 #}
    {% with total=jobsite|length %}
        {% if total|add:"2"|divisibleby:3 %}
        <td></td>
        {% elif total|add:"1"|divisibleby:3 %}
        <td></td><td></td>
        {% endif %}
    {% endwith %}
    </tr>
</table>
逻辑说明
  • 间隔列仅渲染1次,不会生成冗余列打乱布局
  • 计数逻辑统一,每3个单元格自动换行,不会出现行偏移问题
  • 自动判断最后一行缺几个单元格就补几个空td,不管总数据量是不是3的倍数,表格结构始终完整,适配Avery打印模板的对齐要求,不会出现内容重复、布局错位的问题

内容的提问来源于stack exchange,提问作者beach_it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:30:57