Jinja2故障安全模板渲染

时间:2017-05-06 15:25:27

标签: python jinja2

我正在使用Jinja2创建电子邮件通知消息,主要是错误通知。

有时我会收到有关错误详情的无效或不完整数据。毕竟,当发生这种情况时,这是一个错误的情况。例如。可能缺少dict项目或值类型可能不正确。在这种情况下,渲染失败,但必须发送错误通知。

我可以在异常处理程序中执行以下操作:

  1. 按原样发送模板。收件人至少会知道错误事件的类型,但缺少重要数据
  2. 使用原始数据发送备份模板。这意味着要保留每条消息的两个版本。
  3. 我真正想要的是以最好的方式呈现模板,跳过所有错误。有没有办法在Jinja2中做到这一点?

1 个答案:

答案 0 :(得分:0)

在任何需要的地方使用defaults。还处理未定义的变量:

  

default(value, default_value=u'', boolean=False)

     

如果值未定义,它将返回传递的默认值,否则返回变量的值:

{{ my_variable|default('my_variable is not defined') }}
     

如果定义了变量,则输出my_variable的值,否则输出'my_variable is not defined'。如果要将默认值与评估为false的变量一起使用,则必须将第二个参数设置为 true

{{ ''|default('the string was empty', true) }}

如果您根据数据创建更复杂的结构,则可以使用none

{% if p is not none %}   
    {{ p.User['first_name'] }}
{% else %}
    NONE
{%endif %}