Django Templates: Block and If statements don’t work like you might expect
I ran across this wrinkle in Django Templates at work the other day, and thought I should document what I found.
In a base template file, I had declared a block for use in page templates:
<!-- base.html -->
When I went to use that block in a page template, I wrapped that usage in an if
statement based on a feature flag (which is a boolean value I had set in a settings file):
<!-- page.html -->
{% extends "base.html" %}
{% if FEATURE_FLAG %}
{% block feature %}
<p>Stuff went here</p>
{% endblock %}
{% endif %}
Here's the thing - even with the feature flag set to False
- the block on the page still rendered.
<!-- rendered page.html with FEATURE_FLAG = False -->
<p>Stuff went here</p>
It seems that the block
declaration ignores/overrides the outer if
statement. I don't know about you, but that was not what I expected.
The fix was to apply the feature flag boolean to the base template:
<!-- base.html -->
I was lucky that the blanket logic worked in this case, but it could have been an issue if I wanted more granular control.
Previous: Books I Read in 2018