29

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

谢谢!

4

3 回答 3

33

您可以使用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'
于 2013-09-16T14:31:56.187 回答
15

根本不需要使用点符号,你可以这样做:

"{{course_codes[s.course]}}"
于 2016-12-08T12:16:52.377 回答
6

我正在将 Jinja 与 Salt 一起使用,我发现类似以下内容的效果很好:

{% for role in pillar.packages %}
  {% for package in pillar['packages'][role] %}
    install_{{ package }}:
      pkg.installed:
        - name: {{ package }}
  {% endfor %}
{% endfor %}

也就是说,[ ]当您需要使用变量时,请使用更详细的语法并省略引号。

于 2016-08-31T19:30:01.697 回答