【发布时间】:2016-09-12 11:59:49
【问题描述】:
我正在尝试创建电子邮件模板并尝试添加一些条件
%if object.origin:
origin : ${object.origin or ''}
%endif
但是当我尝试渲染模板时,它只渲染 $part 而不是 %if %endif 部分,
所以 %if 和 %end if 在电子邮件模板中看起来是可见的,并且它没有执行条件。
如何克服?
【问题讨论】:
我正在尝试创建电子邮件模板并尝试添加一些条件
%if object.origin:
origin : ${object.origin or ''}
%endif
但是当我尝试渲染模板时,它只渲染 $part 而不是 %if %endif 部分,
所以 %if 和 %end if 在电子邮件模板中看起来是可见的,并且它没有执行条件。
如何克服?
【问题讨论】:
Odoo 使用jinja & mako 模板引擎作为电子邮件模板,您的代码看起来像使用了mako 模板,但您可以尝试jinja 模板。应用 jinja 模板后,代码变得不一样了,
{% if object.origin %}
origin : ${object.origin or ''}
{% endif %}
【讨论】:
分享知识:
这个解析问题很可能是由多种因素造成的:
Jinja2/Mako 模板中的
%语法对应于行 声明,并且这仅在 % 符号是第一个时才有效 行上的非空白字符。当您处理 HTML 时 模板(就像电子邮件模板一样),有一个非常非常 很有可能每行在 % 之前都有很多不可见的 HTML 标签 符号,或者 % 符号不在自己的行上。这是无效的:
% if object.street2: ${(object.street or '-') | 安全}
% endif虽然这是有效的(即使很奇怪,混合 2 种不同的 字段):
% 如果 object.street2:
${(object.street or '-') |安全}
% endif
【讨论】: