jinja2 {%include file%}在搜索路径之外行不通

问题描述 投票:0回答:2

这是一个基本问题,可能与Jinja2前缀Loader或Choicelododer有关。

python 3.6我们加载此命令

jinja2.FileSystemLoader( searchpath= "\\template_folder\\")
Windows 7,我们的文件结构如下。

-folder_bbb * subfile.txt - template_folder * template_file -Folder_AAA * subfile.txt

从template_file我们成功使用此命令

{% include "folder_aaa/subfile.txt" %}

现在我们希望将文件移动一个级别,然后写

{% include "../folder_bbb/subfile.txt" %}

但这是不起作用的,找不到发现文件。

正确写作方法是什么?谢谢

您可以指定加载器中的所有路径

jinja2.FileSystemLoader(["c:\\template_folder\\", "c:\\folder_bbb\\"])

python jinja2
2个回答
5
投票
{% include "subfile.txt" %}

将按顺序搜索路径,以便如您所说,将文件移动一个级别,将找到文件。 (您需要模板本身的template_folder路径。)
    

我有一个确切的问题,并花了整整一天的时间疯狂,然后才意识到

jinja2的文件系统loader根据加载的模板设置了根目录。
当您定义
FileSystemLoader(searchpath="\\template_folder\\")

时,template_folder成为所有模板的根目录。这意味着:


0
投票

{% include "folder_aaa/subfile.txt" %}工作是因为“ folder_aaa”在“ template_folder”内部。

{% include "../folder_bbb/subfile.txt" %}

由于folder_bbb不在template_folder之外,而文件系统loader不起作用。
  • solution1:修改Filesystemloader以包含多个路径

    如果您可以控制加载程序,则可以指定多个搜索路径,以便包括template_folder和folder_bbb:

  • jinja2.FileSystemLoader(["c:\\template_folder\\", "c:\\folder_bbb\\"])
  • 现在,您可以做:

    {% include "subfile.txt" %}
    
    Jinja2将在两个目录中搜索该文件。
    

    Solution2:如果您无法修改Filesystemloader(例如,在Ansible或其他环境中)
然后您遇到了相对路径

在root目录,这意味着您只能向下包含文件。

在我的情况下(使用Ansible时),解决方案是将我加载的模板移至最高级别(Template_Folder)。这样,我可以引用模板conduce

使用向下相对路径

而不是尝试从父目录中包含文件。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.