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}}}}
ありがとう!
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'
ドット表記を使用する必要はまったくありません。次のことができます。
"{{course_codes[s.course]}}"
私はJinjaとSaltを使用していますが、次のようなものがうまく機能することがわかりました。
{% for role in pillar.packages %}
{% for package in pillar['packages'][role] %}
install_{{ package }}:
pkg.installed:
- name: {{ package }}
{% endfor %}
{% endfor %}
つまり、より詳細な[ ]
構文を使用し、変数を使用する必要がある場合は引用符を省略します。