我正在尝试在模板中包含另一个位于同一文件夹中的文件。为此,我只是做{% import 'header.jinja2' %}
。问题是我不断收到TemplateNotFound
错误。
我的模板文件夹看起来像
+ 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 /'前缀。这可能吗?
由于
答案 0 :(得分:8)
jinja2.Environment.join_path() docstring中有一个关于子类化Environment并覆盖join_path()方法的提示,以支持相对于当前的import
路径(即父参数) join_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)