Using include to dynamically point to HTML

2020-08-19 02:00发布

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?

4条回答
Ridiculous、
2楼-- · 2020-08-19 02:48

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.

查看更多
倾城 Initia
3楼-- · 2020-08-19 03:02

At least in Jinja2 2.7.1 this works:

{% include 'templates/case/%s/intro.html' % cid %}
查看更多
The star\"
4楼-- · 2020-08-19 03:02

Here's how to pass the code directly through include

{% include "templates/case/"+cid+"/intro.html" %}
查看更多
迷人小祖宗
5楼-- · 2020-08-19 03:05

Found the answer in another Stack Overflow question here:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %}
查看更多
登录 后发表回答