AP257
AP257

Reputation: 93803

Django: construct value of {% include %} tag dynamically?

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

Answers (3)

user1444978
user1444978

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

chrisbunney
chrisbunney

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

Spacedman
Spacedman

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

Related Questions