Python / Django - If statement in template around extends

While you may not wrap extends in logic blocks, since it must be the first tag if used, it can still accept variables, including filters. This should fit your purpose nicely:

{% extends ajax|yesno:"base_ajax.html,base.html" %}
{# stuff #}

Note: the yesno filter also accepts null values (None) as the third choice, and if you do not specify one (as in this case), it will fallback to converting it to False (i.e. it will return the second choice). This allows you to not specify the ajax variable in your template without breaking it.


Suggested by user Rafael:

{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
{# stuff #}

This will only work if you are using a RequestContext context instead of a plain Context object and you have the request context processor enabled, or alternatively, if you insert the request object in your template context.


You cannot do it like that. You can however set a variable and use that to choose the template to extend:

{% extends my_template %}

Then in python code you write something like:

if ajax:
    template_values['my_template'] = 'base_ajax.html'
else:
    template_values['my_template'] = 'base.html'

You may wish to refer to the documentation for more information.