web-dev-qa-db-ja.com

jinja2-ifステートメントにブロックを入れる方法は?

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ステートメント内にブロックを配置するにはどうすればよいですか?

37
Taxellool

_{% block %}_条件付きにすることはできません。タグを使用すると、ブロックは常に埋められます。

代わりに条件付きinsideブロックを配置し、super()を使用して、テンプレートで定義されているブロックの元のコンテンツを使用するようにJinjaに指示します。

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