我正在尝试编写一个允许我模拟文件配置的Jinja宏。配置文件本身需要按顺序显示某些设置。我希望能够将dict作为可选变量传递给我的宏,以便我可以覆盖配置文件中的默认设置以及传递非默认设置。
例如,我的默认设置可能如下所示:
{% set default = {
'default_setting': 'default_value',
'another_default_setting': 'another_default_value',
} %}
我的新设置:
{% set new = {
'default_setting': 'new_value',
'new_setting': 'another_new_value',
} %}
然后在我的模板中:
{% set settings = salt['slsutil.merge'](default, new, 'overwrite') %}
{% for setting, value in settings.items() %}
{{ setting }} = {{ value }};
{% endfor %}
应该输出:
default_setting = new_value;
another_default_setting = another_default_value;
new_setting = another_new_value;
答案 0 :(得分:0)
Jinja2中没有OrderedDict
,因此您需要使用元组的元组代替默认设置。由于您的新设置仅是为了覆盖默认设置而不篡改原始顺序,因此应保留该命令。
{% set default = (
('name1', 'value1'),
('name2', 'value2'),
('name3', 'value3')
) %}
{% set new = {
'name1': 'new_value1',
'name2': 'new_value2',
} %}
{% for setting in default -%}
{%- set name, value = setting %}
{{ name }} = {{ new[name] if name in new else value }};
{%- endfor -%}