我目前在多个不同的子目录中都有模板,我想在jinja2中加载所有模板。看起来只是将FileSystemLoader目录指向树的顶部不会拾取子文件夹中的任何内容。
有没有办法让jinja2加载所有的子目录(只需一个级别就可以了,但整个树会更好)?
到目前为止,我已经成功使用选择加载器:
sub_dirs = [os.path.join(template_file_root,dirname) for dirname in os.listdir(template_file_root)
\ if os.path.isdir(os.path.join(template_file_root, dirname))]
jinja_dirs = [ jinja2.FileSystemLoader(dirname) for dirname in sub_dirs ]
template_env = jinja2.Environment (loader = jinja2.ChoiceLoader(jinja_dirs))
然而,这似乎有点hacky。还有更好的建议吗?
答案 0 :(得分:26)
Jinja确实考虑了子文件夹,但必须使用相对于根文件夹的路径引用模板。
如果我们有mydir / foo / bar.html,这可行:
template_env = jinja2.Environment(loader=jinja2.FileSystemLoader('mydir'))
template_env.get_template('foo/bar.html')