这是一个基本问题,可能与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\\"])
{% include "subfile.txt" %}
将按顺序搜索路径,以便如您所说,将文件移动一个级别,将找到文件。 (您需要模板本身的template_folder路径。)
我有一个确切的问题,并花了整整一天的时间疯狂,然后才意识到
jinja2的文件系统loader根据加载的模板设置了根目录。当您定义
FileSystemLoader(searchpath="\\template_folder\\")
时,template_folder成为所有模板的根目录。这意味着:
{% 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或其他环境中)使用向下相对路径
而不是尝试从父目录中包含文件。