web-dev-qa-db-ja.com

キーが変数であるときにジンジャの辞書から値を取得するにはどうすればよいですか?

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}}}}

ありがとう!

21
tytk

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'
27
R. Max

ドット表記を使用する必要はまったくありません。次のことができます。

"{{course_codes[s.course]}}"
8
Mike Vella

私はJinjaとSaltを使用していますが、次のようなものがうまく機能することがわかりました。

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

つまり、より詳細な[ ]構文を使用し、変数を使用する必要がある場合は引用符を省略します。

3
onlyanegg