使用docxtpl填充Word模板遇Jinja2语法错误:expected token 'end of print statement' got 'Size'
解决docxtpl使用中Jinja2的TemplateSyntaxError问题
错误根源分析
expected token 'end of print statement' got 'Size'这个报错是Word模板文件中的Jinja2语法错误,和你的Python代码关联极小(代码存在小问题但不是报错核心原因)。Jinja2解析模板时,在本该结束打印语句的位置识别到了Size字符,说明模板里存在不符合语法规范的变量标记,常见场景包括:
- 变量名包含空格,比如错误写成
{{ Product Size }}(正确写法应为{{ product_size }}/{{ productSize }},且需和上下文字典的键名对应) - Jinja2标记未正确闭合,或标记内混入了多余字符
- Word自带的隐藏格式(如智能引号、特殊换行符)干扰了Jinja2的解析逻辑
代码小问题修正
你的Python代码存在中文引号的语法错误,先修正为:
import jinja2 from docxtpl import DocxTemplate from jinja2 import Template # 替换为你的实际模板路径,使用英文引号 doc = DocxTemplate("path/to/your/template.docx") # 上下文字典使用英文双引号 context = {"name": "ABCD"} doc.render(context) # 保存路径同样使用英文引号 doc.save("populated_template.docx")
模板文件排查与修复
- 检查所有Jinja2标记:打开Word模板,全局搜索
{{和}},逐一验证:- 确保变量名无空格、特殊字符,标记前后无多余符号
- 确认每个
{{都有对应的}},无遗漏或错位
- 清除格式干扰:将模板内容复制到纯文本编辑器(如Notepad++)中检查,排除Word隐藏格式的影响后再复制回模板
- 分段定位错误:若模板内容较多,可逐步删除部分内容测试,快速定位到出错的具体段落或标记
额外兼容排查
- 确保docxtpl与Jinja2版本兼容,可尝试安装稳定组合:
pip install docxtpl==0.16.0 jinja2==3.1.2 - 不要手动修改Word的底层XML结构,仅在可视化界面编辑Jinja2标记即可
内容的提问来源于stack exchange,提问作者TheFinisher
相关产品推荐
相关产品推荐

