Reputation: 93803
I'd like to use an {% include page.html %}
tag in my Django template, and construct the value of page.html
dynamically.
Is there any way to do this in Django?
Here's a pseudocode example:
{% include page_{{mode}}.html %}
Thanks!
Upvotes: 24
Views: 8585
Reputation: 124
You can concatenate plain strings and variables right in your templates using with
tag and add
filter,
see this SO answer.
Upvotes: 3
Reputation: 5946
I think that goliney provided a better answer here
In summary:
You can combine django's built-in 'with' template tag to assign a dynamically constructed template name to a variable and the 'add' filter and to dynamically construct a template name.
For example:
{% with template_name='page_'|add:mode|add:".html" %}
{% include ""|add:template_name %}
{% endwith %}
Upvotes: 12
Reputation: 94202
From the docs:
The template name can either be a variable or a hard-coded (quoted) string, in either single or double quotes.
So construct a variable in your view and pass it to your template via the context, say as 'modeTemplate': "page_"+mode+".html". Then do:
{% include modeTemplate %}
Assuming 'mode' is a python variable in your view code.
Upvotes: 23