Flask/Jinja2 - 根据当前模板引入相对路径的模板

3
有没有一种语法可以引用本地文件?例如,不需要写成:
{% include 'user/project/task/task_detail/tab.html' %}

我想写一个从与tab.html在同一目录下的模板中获取内容的程序:
{% include './tab.html' %}

但上述代码会引发 jinja2.exceptions.TemplateNotFound 异常。

2个回答

4
你可以继承Jinja的Environment类,并重写join_path()方法,以支持相对于当前目录的导入路径。
class RelativeEnvironment(jinja2.Environment):
    """Override join_path() to enable relative template paths."""
    def join_path(self, template, parent):
        return os.path.join(os.path.dirname(parent), template)

请注意,Jinja的模板查找机制旨在消除模板路径的歧义。

您可以阅读更多信息https://jinja.palletsprojects.com/en/2.10.x/api/#jinja2.Environment.join_path

这个问题可能是如何在Jinja2中使用相对路径包含模板的重复。


在Jinja/Flask中使用这样的子类的文档似乎比较难找,有没有什么指引? - haliphax

1
Flask/j2需要知道文件的结构,它知道app子文件夹(静态、模板等)的基本结构。最好的方法是将其放在静态子文件夹中,然后使用url_for函数指向它。
..."{{ url_for('static', filename='<subfolder>/tab.html') }}"...
`

这不是我要找的。 - Mojimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接