当key是变量时,如何从jinja中的字典中获取值?

时间:2013-09-16 14:22:40

标签: python variables dictionary jinja2 substitution

我正在尝试从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}}}}

谢谢!

3 个答案:

答案 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 %}

也就是说,使用更详细的[ ]语法,并在需要使用变量时保留引号。