2013-11-22 157 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 %}