如何在 Jinja2 中包含具有相对路径的模板

2024-04-27

我正在尝试在模板中包含同一文件夹中的另一个模板。为此,我只是在做{% import 'header.jinja2' %}。问题是我不断收到TemplateNotFound error.

我的模板文件夹看起来像

+ myProject
|
+--+ templates
   |
   +--+ arby
   |  |-- header.jinja2
   |  |-- footer.jinja2
   |  +-- base.jinja2
   |
   +--+ bico
      |-- header.jinja2
      |-- footer.jinja2
      +-- base.jinja2

因此,当我渲染 arby 的“base.jinja2”时,我想包含“arby/header.jinja2”,当我渲染 bico 的“base.jinja2”时,我想包含“bico/header.jinja2”。问题是我不想在 {% include 'arby/base.jinja2' %} 中写入 'arby/' 或 'bico/' 前缀。这可能吗?

Thanks


里面有一个提示jinja2.Environment.join_path() http://jinja.pocoo.org/docs/api/#jinja2.Environment.join_path关于子类化环境并重写 join_path() 方法以支持的文档字符串import相对于当前路径(即parentjoin_path 的参数)模板。

下面是此类的一个示例:

class RelEnvironment(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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jinja2 中包含具有相对路径的模板 的相关文章

随机推荐