【问题标题】:how to disable jinja2 template from printing undefine values in YAML如何禁用 jinja2 模板在 YAML 中打印未定义的值
【发布时间】:2016-11-17 01:51:07
【问题描述】:

如何避免 jinja2+python 打印 YAML 中没有“值”的行(“键”:“值”)。

假设我在 .yaml 文件中有一个变量列表。例如:

- Fruit : Orange
- Color : Red
- Food : Noodle

我有一个从 yaml 文件中获取数据输入的模板。例如:-

- set fruit {{FRUIT}}
- set color {{COLOR}}
- set food {{FOOD}}

结果将打印为:-

set fruit Orange
set color Red
set food Noodle

但是,如果一个或多个 yaml 数据未定义(Color :),为什么将带有该变量的行打印为无(set color None)?我怎样才能忽略没有“值”的行?。

【问题讨论】:

    标签: python-2.7 jinja2


    【解决方案1】:

    您可以过滤掉if statement 中具有空值的行:

    {% if FRUIT %}
    - set fruit {{FRUIT}}
    {% endif %}
    {% if COLOR %}
    - set color {{COLOR}}
    {% endif %}
    {% if FOOD %}
    - set food {{FOOD}}
    {% endif %}
    

    或者您有一个带有键/值的字典,您可以在loop 中使用它以使其更紧凑。例如:

    dict_of_items = {'fruit': 'Orange', 'color': 'Red', 'food': 'Noodle'}
    

    然后:

    {% for key, value in dict_of_items.iteritems() %}
    - set {{key}} {{value}}
    {% endfor %}
    

    【讨论】:

    • 如果我还有很多需要检查的语句怎么办。什么是正确的方法?
    • 添加了一个例子。正确的方法是拥有一个项目的字典,并使用循环来生成 yaml 文件。如果您需要保持项目的顺序,请使用 collections.OrderedDict。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2019-08-11
    • 2016-10-01
    • 2018-03-19
    相关资源
    最近更新 更多