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?
Ответы
Ответ 1
Вы не можете выполнить условие {% block %}
; после использования тега блок всегда будет заполнен.
Поместите свой условный внутри блок вместо этого и используйте super()
, чтобы проинструктировать Jinja использовать исходное содержимое блока, как определено в шаблоне:
{% extends "base.html" %}
{% block content %}
{% if condition %}
<div>blah blah blah blah</div>
{% else %}
{{ super() }}
{% endif %}
{% endblock content %}