Python Jinja2:如何在嵌套循环生成的表格中添加空行
问题解答
你不需要同时跟踪内外层循环来实现需求,当前代码的判断逻辑反而容易出错——比如当外层是最后一个但内层不是最后时,也会添加空行,这可能不符合你“每次内层循环结束后加空行”的初衷(应该是每个外层对应的内层循环全部跑完后加空行,且最后一个外层循环结束后不加)。
更简洁的实现方式
核心思路是:把空行的添加逻辑移到内层循环结束之后,只需要判断当前外层循环是否为最后一个即可,完全不用管内层循环的状态。
修改后的代码如下:
<table border="1" style="border-collapse:collapse;"> {% for dict in table_data %} {% for test_name, test_dict in dict["tests_data"].items() %} <!-- 这里写你原本的表格行内容 --> <tr> <td>{{ test_name }}</td> <!-- 其他列的内容 --> </tr> {% endfor %} <!-- 内层循环跑完后加空行,最后一个外层循环不加 --> {% if not loop.last %} <tr bgcolor="FFFFFF"> <td colspan="{{ titles|length }}"><br/></td> </tr> {% endif %} {% endfor %} </table>
额外场景:内层每项后都加空行
如果你的需求是内层循环的每一项之后都加空行,仅排除每个内层的最后一项,同时最后一个外层的最后一项后也不加,那可以用Jinja2自带的loop.parent直接获取外层循环状态,不用手动定义outer_loop:
<table border="1" style="border-collapse:collapse;"> {% for dict in table_data %} {% for test_name, test_dict in dict["tests_data"].items() %} <!-- 表格行内容 --> <tr> <td>{{ test_name }}</td> </tr> <!-- 内层非最后项、或外层非最后项的内层最后项,都加空行 --> {% if not loop.last or not loop.parent.last %} <tr bgcolor="FFFFFF"> <td colspan="{{ titles|length }}"><br/></td> </tr> {% endif %} {% endfor %} {% endfor %} </table>
内容的提问来源于stack exchange,提问作者user2653179
相关产品推荐
相关产品推荐

