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

Odoo13生成发票时报jinja2 'loop'未定义及模板渲染失败错误

问题根因

报错核心是邮件模板存在Jinja2语法错误:loop是Jinja2的内置变量,仅能在{% for %}循环结构内部调用,你当前使用的销售订单确认邮件/发票模板,将loop相关代码写在了循环外部,或是缺失了{% endfor %}闭合标签,导致渲染时识别不到loop变量。

排查修复步骤

  1. 定位出错的模板
  • 进入Odoo后台,激活开发者模式:路径为「设置」→ 页面底部点击「激活开发者模式」
  • 依次进入「技术」→ 「电子邮件」→ 「模板」,搜索销售订单确认邮件(系统原始模板xmlid为sale.mail_template_sale_confirmation),如果是生成发票时报错就搜索发票邮件模板
  • 打开模板编辑页,切换到「进阶」标签,点击关联的QWeb 视图进入模板代码编辑页
  1. 修正loop语法错误
    遍历模板代码中所有用到loop变量的位置:
  • 确认所有loop.index、loop.first、loop.last这类调用,完全包裹在{% for item in object.order_line %}(或其他for循环)的起止标签内,没有漏写{% endfor %}
  • 错误写法示例:
<span>行号:{{ loop.index }}</span>
{% for line in order.order_line %}
<!-- 行内容 -->
{% endfor %}
  • 正确写法示例:
{% for line in order.order_line %}
<span>行号:{{ loop.index }}</span>
<!-- 行内容 -->
{% endfor %}
  • 若模板是从更高版本Odoo复制而来,需删除高版本特有、Odoo13不支持的语法
  1. 验证修复效果
    保存模板修改后,找一个测试销售订单手动触发发送确认邮件,或重新走一遍支付生成发票流程,确认不再抛出渲染错误。

注意事项

  • 若近期安装了第三方销售、发票相关模块,可先临时禁用该模块复测,部分第三方模块会自带修改过的有语法错误的邮件模板
  • 修改模板前建议先导出原始模板文件备份,避免改错后无法回滚

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:00