Jinja2渲染模板-忽略没有值的字段

时间:2019-09-26 13:19:06

标签: python jinja2

我有一个default.yaml,它具有一些属性,例如:

app_conf:
   port: 443
   ping_port: 444

我有一个application.conf,看起来像:

...
master_port "{{ app_conf.port }}";
pingcheck_port "{{ app_conf.ping_port }}";
...

我使用下面的python代码用default.yaml中的字段替换application.conf中的字段

configuration = yaml.load(open('conf/default.yaml'))['app_conf']
template = env.get_template("application.conf")
confReplaceOutput = template.render(app_conf=configuration)

现在,如果{。{app_conf.ping_port}}的值在default.yaml文件中不可用,则呈现的输出为:

    pingcheck_port:;

我希望输出为

pingcheck_port "{{ app_conf.ping_port }}";

那么我该如何配置jinja2以忽略对Yaml文件中没有定义的字段的替换?

1 个答案:

答案 0 :(得分:0)

我会使用if,else和raw块

{% if app_conf is defined and app_conf.ping_port is defined -%}
    pingcheck_port "{{ app_conf.ping_port }}";
{% else %}
    {%raw-%}
        pingcheck_port "{{ app_conf.ping_port }}";
    {%endraw%}
{% endif %}