包含相对于当前模板的Jinja模板

时间:2019-06-19 14:39:27

标签: python flask jinja2

是否有引用本地文件的语法?例如

无需编写:

{% include 'user/project/task/task_detail/tab.html' %}

我要写(从与tab.html位于同一目录中的文件):

{% include './tab.html' %}

但是上面提到了jinja2.exceptions.TemplateNotFound

2 个答案:

答案 0 :(得分:1)

您可以继承Jinja的环境,并重写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

阅读更多内容

这个问题可能是How to include a template with relative path in Jinja2

的重复项

答案 1 :(得分:0)

Flask / j2需要知道查找文件的结构,并且知道应用程序子文件夹的基本结构(静态,模板等)。 最好的方法是将其放在静态子文件夹中,然后使用url_for函数指向它:

..."{{ url_for('static', filename='<subfolder>/tab.html') }}"...
`
相关问题