2013-09-16 35 views
13

我試圖從jinja2中的python字典檢索條目,但問題是我不知道我想提前訪問什麼密鑰 - 密鑰存儲在名爲s.course的變量中。所以我的問題是我需要雙重替換這個變量。我不想使用for循環,因爲循環會超出字典的範圍。這是我創建的一種解決方法,但有可能s.course的值可能會發生變化,因此顯然對它們進行硬編碼很不好。我想它基本上像這樣工作:如何在鍵值爲變量時從jinja中的字典獲取值?

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

謝謝!

+0

爲什麼沒有代表相關課程代碼的實際對象被傳遞到模板? –

回答

18

您可以使用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' 
2

我使用的是神社與鹽,而且我發現,像下面這樣效果很好:

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

也就是說,使用更詳細[ ]語法並在需要使用變量時將引號保留。

5

沒有必要使用點符號在所有的,你可以這樣做:

"{{course_codes[s.course]}}" 
相關問題