我正在尝试从jinja2中的python字典中检索条目,但问题是我不知道我想提前访问哪个密钥 - 密钥存储在名为s.course
的变量中。所以我的问题是我需要双重替换这个变量。我不想使用for
循环,因为这将超过必要的字典方式。这是我创建的一种解决方法,但s.course
值可能会发生变化,因此很明显硬编码就像这样很糟糕。我希望它的工作原理如下:
{% if s.course == "p11" %}
{{course_codes.p11}}
{% elif s.course == "m12a" %}
{{course_codes.m12a}}
{% elif s.course == "m12b" %}
{{course_codes.m12b}}
{% endif %}
但我希望它看起来像这样:
{{course_codes.{{s.course}}}}
谢谢!
答案 0 :(得分:20)
您可以使用course_codes.get(s.course)
:
>>> import jinja2
>>> env = jinja2.Environment()
>>> t = env.from_string('{{ codes.get(mycode) }}')
>>> t.generate(codes={'a': '123'}, mycode='a').next()
u'123'
答案 1 :(得分:8)
根本不需要使用点符号,您可以这样做:
"{{course_codes[s.course]}}"
答案 2 :(得分:3)
我正在使用Jinja和Salt,我发现以下类似的东西效果很好:
{% for role in pillar.packages %}
{% for package in pillar['packages'][role] %}
install_{{ package }}:
pkg.installed:
- name: {{ package }}
{% endfor %}
{% endfor %}
也就是说,使用更详细的[ ]
语法,并在需要使用变量时保留引号。