J'essaie d'utiliser un if
pour déterminer quel bloc doit remplir mon {% block content %}
.
J'ai un base.html
qui a une valeur par défaut {% block content %}
et ce modèle étend base.html
. J'ai donc essayé ceci:
{% extends "base.html" %}
{% if condition == True %}
{% block content %}
<div>blah blah blah blah</div>
{% endblock content %}
{% endif %}
et je m'attendais à voir blah blah blah blah
si la condition était vraie et voir le bloc par défaut s'il n'était pas vrai.
Mais les deux fois j'ai eu blah blah blah blah
.
Ensuite, j'ai essayé celui-ci:
{% 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 %}
et j'ai eu cette erreur:
TemplateAssertionError: block 'content' defined twice
Comment puis-je placer un bloc dans une instruction if
?
Vous ne pouvez pas rendre un {% block %}
Conditionnel; une fois que vous utilisez la balise, le bloc sera toujours rempli.
Mettez votre conditionnel à l'intérieur le bloc à la place, et utilisez super()
pour demander à Jinja d'utiliser le contenu original du bloc tel que défini dans le modèle:
{% extends "base.html" %}
{% block content %}
{% if condition %}
<div>blah blah blah blah</div>
{% else %}
{{ super() }}
{% endif %}
{% endblock content %}