Using include to dynamically point to HTML

2020-08-19 02:16发布

问题:

I want to point to a different HTML files based on a variable. I am using include in the following format:

{% include 'templates/case/{{cid}}/intro.html' %}

This throws an error:

TemplateNotFound: templates/case/{{cid}}/intro.html

Looking at this I know Jinja2 does not resolve the variable at runtime. The value of cid = ABC (ABC is a folder's name in the path), so I expected the total path to be:

templates/case/ABC/intro.html

If I use this resolved path directly in include it works.

How can I resolve this?

回答1:

At least in Jinja2 2.7.1 this works:

{% include 'templates/case/%s/intro.html' % cid %}


回答2:

Here's how to pass the code directly through include

{% include "templates/case/"+cid+"/intro.html" %}


回答3:

Found the answer in another Stack Overflow question here:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %}


回答4:

You could always compute the full path in view code and pass that down to the template, at that point, remove any quotes and curly braces around the variable.

While doing this, be wary of path traversal attacks.