2015-06-03 32 views
2

的外部訪問,我想設置環路,後來顯示的東西或不依賴於標誌,像這樣一個Jinja2的模板內的標誌:在Jinja2的循環設置標記,循環

{% set foobar = False %} 
{% for foo in foos %} 
    [... render the foo here ...] 
    {% if foo.bar %} 
     {% set foobar = True %} 
    {% endif %} 
{% endfor %} 
[...] 
{% if foobar %} 
    At least one of the foos is bar!!! 
{% endif %} 

然而它似乎這是不可能的,並且循環內設置的foobar與循環外部的不一樣。即使foo.bar對於其中一個foos評估爲「真」,foobar仍然會在循環外部爲False。

有沒有什麼辦法只用模板代碼做這件事,而沒有重複遍歷所有的foos?

回答

3

我不認爲這是Jinja2直接支持。

IMO最好的辦法是完全避免它,並在模板之外預先計算儘可能多的數據。

如果您無法避免在模板中執行此操作,可以採用其他方法來解決此問題。使用字典或一些自定義對象:

{% set foobar = {'value': False} %} 
{% for foo in foos %} 
    [... render the foo here ...] 
    {% if foo.bar %} 
     {% if foobar.update({'value': foo.bar}) %} 
     {% endif %} 
    {% endif %} 
{% endfor %} 
[...] 
{% if foobar['value'] %} 
    At least one of the foos is bar!!! 
{% endif %} 
+0

謝謝!當然,我可以預先計算標誌的價值,但我覺得這比做內聯更醜陋。 – Nick