【问题标题】:jinja2 - how to put a block in an if statement?jinja2 - 如何在 if 语句中放置一个块?
【发布时间】:2014-05-04 12:04:26
【问题描述】:

我正在尝试使用if 来确定哪个块应该填充我的{% block content %}

我有一个base.html,它有一个默认的{% block content %},这个模板正在扩展base.html。所以我尝试了这个:

{% extends "base.html" %}
{% if condition == True %}
    {% block content %}
    <div>blah blah blah blah</div>
    {% endblock content %}
{% endif %}

如果条件为真,我期待看到blah blah blah blah,如果条件不成立,我希望看到默认块。

但两次我都收到了blah blah blah blah

然后我尝试了这个:

{% extends "base.html" %}
{% if condition == True %}
    {% block content %}
    <div>blah blah blah blah</div>
    {% endblock content %}
{% else %}
    {% block content %}
    <div>The Default Thing</div>
    {% endblock content %}
{% endif %}

我得到了这个错误:

TemplateAssertionError: block 'content' defined twice

如何在if 语句中放置一个块?

【问题讨论】:

    标签: python python-2.7 if-statement flask jinja2


    【解决方案1】:

    您不能将{% block %} 设为有条件的;一旦你使用标签,这个块总是会被填充。

    将您的条件放在块中,并使用super() 指示Jinja 使用模板中定义的块的原始内容:

    {% extends "base.html" %}
    {% block content %}
        {% if condition %}
            <div>blah blah blah blah</div>
        {% else %}
            {{ super() }}
        {% endif %}
    {% endblock content %}
    

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多