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

时间:2014-03-26 08:17:44

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

我正在尝试使用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语句中?

1 个答案:

答案 0 :(得分:53)

你无法提出{% block %}条件;一旦你使用了标签,就会一直填写该块。

将条件置于块中,然后使用super()指示Jinja使用模板中定义的块的原始内容:

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