2015-11-19 57 views
1

我有以下神社陣列:遍歷數組神社

{'e34': ['120'], 'e24': ['50']} 

我想找如果字包含e2,並把它帶到另一個函數。

我做了以下內容:

{% set result = 'default' %} 
{% for item, value in jinjaarray.items() %} 
    {% if 'e2' in item %} 
     result = item 
    {% endif %} 
{% endfor %} 

但它失敗,並且不進入到循環。

我該怎麼辦?

回答

2

相反,使用Python3等.items(),jinja2使用Python2-fashioned .iteritems(),如docs中所述。

此外,你需要使用set字典assign變量resultitem

from jinja2 import Template 

d = {'e34': ['120'], 'e24': ['50']} 

s = """{% set result = 'default' %} 
{% for item, value in test_dict.items() %} 
    {% if 'e2' in item %} 
     {% set result = item %} 
     {{ result }} 
    {% endif %} 
{% endfor %}""" 

template = Template(s) 
print(template.render(test_dict=d)) 

因爲我在我的系統我不得不打電話.items()使用Python3。取決於您的版本,您可以改爲撥打.iteritems()

因爲我沒有在我的系統上設置jinja2沙箱環境,所以我不得不寫一個如上所示的快速髒代碼片段。這提供了以下的輸出:

'\n\n \n  \n  e24\n \n\n \n' 

光學上講這是不是很好,但它打印出的e24期望值。

+0

它仍然沒有進入循環...我注意到結果沒有更新。 – MiddleWare

+0

您能否爲您的問題添加一個最小工作示例以便讓我的系統上運行一些代碼? – albert

+0

當我打印jinjaarray時,它給了我以下結果:'{'e34':['120'],'e24':['50']}'。這個數組來自外部軟件,所以我不能寫你的例子。所以結果是,我應該得到'e24',但是我得到'default'(循環結束後)。 – MiddleWare