jinja2 - how to put a block in an if statement?
87,795
You cannot make a {% block %}
conditional; once you use the tag, the block is always going to be filled in.
Put your conditional inside the block instead, and use super()
to instruct Jinja to use the original contents of the block as defined in the template:
{% extends "base.html" %}
{% block content %}
{% if condition %}
<div>blah blah blah blah</div>
{% else %}
{{ super() }}
{% endif %}
{% endblock content %}
Author by
Taxellool
Updated on June 08, 2020Comments
-
Taxellool almost 4 years
I am trying to use an
if
to determine which block should fill my{% block content %}
.I have a
base.html
which has a default{% block content %}
and this template is extendingbase.html
. So I tried this:{% extends "base.html" %} {% if condition == True %} {% block content %} <div>blah blah blah blah</div> {% endblock content %} {% endif %}
and I was expecting to see
blah blah blah blah
if condition was true and see the default block if it wasn't true.But both times I got
blah blah blah blah
.Then I tried this one:
{% 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 %}
and I got this error:
TemplateAssertionError: block 'content' defined twice
How can I put a block inside an
if
statement?