Подтвердить что ты не робот

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 %}

и я ожидал увидеть "бла-бла-бла-бла", если условие было истинным и увидеть блок по умолчанию, если это не так.

но оба раза я получил "бла-бла-бла-бла".

Затем я попробовал следующее:

{% 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: блок "контент", определенный дважды

как я могу поместить блок внутри оператора if?

4b9b3361

Ответ 1

Вы не можете выполнить условие {% block %}; после использования тега блок всегда будет заполнен.

Поместите свой условный внутри блок вместо этого и используйте super(), чтобы проинструктировать Jinja использовать исходное содержимое блока, как определено в шаблоне:

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