2013-11-22 159 views
8

我閱讀了文檔,我不清楚這是正確的。我知道你可以使用嵌套for循環,但如果語句似乎不同。Jinja2是否支持嵌套if語句?

我可以做以下嗎?

{% if thing=true %} 
<div> something here</div> 
    {% if diffthing=true %} 
    <div> something else</div> 
    {% else %} 
    <div> third thing</div> 
    {% endif %} 
{% else %} 
<div> nothing here </div> 
{% endif %} 

或者應該格式有所不同?

回答

1

答案是肯定的。

我在實時應用程序中使用非常類似於您的邏輯,並且嵌套的if塊按預期工作。如果你不保持你的代碼清潔,它會有點混亂,但它工作正常。

7

Jinja2支持嵌套塊,包括if語句和其他控制結構。

請參閱關於Block Nesting and Scope的文檔:「塊可以嵌套以獲得更復雜的佈局。」

一個很好的用例,這是寫宏有條件地輸出HTML:

{# A macro that generates a list of errors coming back from wtforms's validate function #} 
{% macro form_error_summary(form, li_class='bg-danger') %} 
    {# only do the following on error... #} 
    {% if form.errors %} 

     <ul class="errors"> 

     {# you can do layers of nesting as needed to render your content #} 
     {% for _field in form %} 
      {% if _field.errors %} 
       {% for error in _field.errors %}     
        <li class={{li_class}}>{{_field.label}}: {{ error|e }}</li> 
       {% endfor %} 
      {% endif %} 
     {% endfor %} 
     </ul> 

    {% endif %} 
{% endmacro %}