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

docxtpl结合Jinja实现docx带条件表格渲染及多余空行修复

docxtpl动态表格多余空行解决办法

问题根因

{%tr %}是docxtpl针对表格行的专用控制前缀,标注该前缀的指令所在的整行都会被识别为表格控制行。你当前把循环、判断、结束指令分别放在了独立的空表格行中,这些控制行渲染后没有实际内容,就会变成多余空行。同时你的Python代码存在遗漏:context没有给x键赋值,模板循环x时会取不到数据。


方案1:仅调整模板(无需修改Python逻辑)

直接在循环语句中内置过滤条件,省略单独的if/endif指令,所有控制指令和内容合并到同一行,避免额外空行。模板修改后如下:

C1c2c3c4c5
{%tr for i in x if "arya" in i.name %}{{ i.number }}
{%tr endfor %}

方案2:Python侧提前过滤数据(逻辑更清晰,推荐)

把数据过滤逻辑放在Python层处理,模板只负责渲染最终数据,完全避免模板层复杂判断带来的格式问题:

修正后Python代码

from docxtpl import DocxTemplate

tpl = DocxTemplate('templates/dynamic_table_tpl.docx')
raw_data = {
    1: {"name": "aryan", "number": 1},
    2: {"name": "anand", "number": 2},
    3: {"name": "aishwarya", "number": 3}
}
# 提前过滤符合条件的数据
filtered_list = [item for item in raw_data.values() if "arya" in item["name"]]
# 给context的x键赋值
context = {"x": filtered_list}

tpl.render(context)
tpl.save('output/dynamic_table.docx')

对应简化版模板

C1c2c3c4c5
{%tr for i in x %}{{ i.number }}
{%tr endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:03