【问题标题】:jinja2 filesystemloader load all subdirectoriesjinja2 filesystemloader 加载所有子目录
【发布时间】:2012-03-27 07:58:45
【问题描述】:

我目前在多个不同的子目录中有模板,我想在 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))

不过,这似乎有点骇人听闻。有更好的建议吗?

【问题讨论】:

    标签: python jinja2


    【解决方案1】:

    Jinja 确实考虑了子文件夹,但必须使用相对于根文件夹的路径引用模板。

    如果我们有 mydir/foo/bar.html,这可行:

    template_env = jinja2.Environment(loader=jinja2.FileSystemLoader('mydir'))
    template_env.get_template('foo/bar.html')
    

    【讨论】:

    • 当模板具有相对于自身的import(或可能是extends)时,我遇到了同样的问题 OP 可能一直在尝试解决。
    • 他们应该有一些关于这个的文档,因为这并不明显!
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2011-11-06
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多