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 代码将 application.conf 中的字段替换为 default.yaml 中的字段
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 文件中没有定义的字段的替换?
解决方案
我会使用 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 %}
推荐阅读
- archunit - ArchUnit 规则来测试@Service 只依赖于自己包中的@Repository?
- angular - 从订阅内的 ngx-translate 获取翻译值
- java - 如何使用 Rest Assured 将多个文件作为输入传递给 api
- jquery - 将参数值从 jquery 数据表 ajax 传递给控制器
- angular - 从类似点击的事件中订阅 observable 的 Angular 首选实践
- flutter - Flutter SVG 作为 ImageIcon
- linux - 如何使用 shell 脚本读取一周、一个月的日志数据?
- for-loop - Rust 正在跳过 for 循环
- jquery - 单击按钮时的 jQuery 函数,然后显示动画并加载新页面
- django - REST 框架检索到错误的数据