2012-09-29 20 views
3

環路I具有類似於的Jinja2用於與條件

data = {{'value': 1, 'state': False}, 
     {'value': 2, 'state': True}} 

當狀態和值將改變根據外部條件的數據結構。

我想使用的Jinja2爲...與其他條件循環,像

{% for item in data where item.state == True %} 
    {{ item.value }} 
{% else %} 
    no true items 
{% endfor %} 

我使用的數據結構在多個地方,有時都需要顯示。我只想保留一個結構體的副本,並且讓Jinja2模板負責顯示狀態爲True的項目或沒有任何項目的消息,而不是必須預先處理它Python將它提供給模板之前,或將結構拆分爲多個部分。

這是使用Python 2.7和Jinja2 2.6在Google App Engine上運行的,數據結構由memcache支持。

回答

6

這是你在找什麼:

{% for item in data if item.status %} 
    {{ item.value }} 
{% else %} 
    no true items 
{% endfor %} 
+0

感謝您的建議。這將循環所有項目,並且爲沒有item.status == True的每個項目輸出「no true items」,而不是僅在感興趣的項目上循環並在沒有項目時觸擊{%else%} item.status == True的項目。 –

+0

呵呵,我現在更新了答案....它會遍歷item.status爲True的項目,如果沒有迭代發生,則輸出'no true items'。 –

+0

呵呵。我以爲我曾嘗試過,但它確實有效。謝謝! –

0

我會建議看Accessing global attributes from inside a macro in Jinja2,如果你使用的瓶你可以看看template context processors。對於它的價值,我所做的(在Flask中)是創建實例變量,它們是應用程序實例的一部分;我不明白你爲什麼不能在Jinja2環境下做同樣的事情。換句話說,將您的字典添加到Jinja2的環境中,並驗證需要什麼(如果有的話)使其在模板中可用。