使用include动态指向HTML

Utp*_*pal 10 html python jinja2

我想指向一个基于变量的不同HTML文件.我使用以下格式的include:

{% include 'templates/case/{{cid}}/intro.html' %}
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

TemplateNotFound: templates/case/{{cid}}/intro.html
Run Code Online (Sandbox Code Playgroud)

看看这个,我知道Jinja2在运行时没有解析变量.值cid = ABC(ABC是在路径中的文件夹的名称),所以我预计总路径是:

templates/case/ABC/intro.html
Run Code Online (Sandbox Code Playgroud)

如果我直接在包含它使用这个解决的路径它是有效的.

我该如何解决这个问题?

fon*_*nso 12

至少在Jinja2 2.7.1中这有效:

{% include 'templates/case/%s/intro.html' % cid %}
Run Code Online (Sandbox Code Playgroud)


小智 8

以下是如何直接通过include传递代码

{% include "templates/case/"+cid+"/intro.html" %}
Run Code Online (Sandbox Code Playgroud)


use*_*424 5

此处的另一个 Stack Overflow 问题中找到了答案:

{% set path = 'templates/case/' + cid + '/intro.html' %}{% include path %}
Run Code Online (Sandbox Code Playgroud)


Tho*_*zco 3

您始终可以计算视图代码中的完整路径并将其传递给模板,此时删除变量周围的任何引号和大括号。

执行此操作时,请警惕路径遍历攻击