tyt*_*ytk 17 python variables dictionary substitution jinja2
我正在尝试从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 %}
Run Code Online (Sandbox Code Playgroud)
但我希望它看起来像这样:
{{course_codes.{{s.course}}}}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Rol*_*Max 23
你可以使用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'
Run Code Online (Sandbox Code Playgroud)
根本不需要使用点符号,您可以这样做:
"{{course_codes[s.course]}}"
Run Code Online (Sandbox Code Playgroud)
我正在将 Jinja 与 Salt 一起使用,我发现类似以下内容的效果很好:
{% for role in pillar.packages %}
{% for package in pillar['packages'][role] %}
install_{{ package }}:
pkg.installed:
- name: {{ package }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
也就是说,[ ]当您需要使用变量时,使用更详细的语法并省略引号。
| 归档时间: |
|
| 查看次数: |
31315 次 |
| 最近记录: |