我正在尝试构建一个使用 Jinja2 模板的项目。我想要一种可以导入到许多其他项目中的模板库。我遇到的问题是,我无法找到从我的项目模板中包含/导入此库中的模板的方法。
作为示例,我们可以使用 Jinja2 文档 here 中找到的相同示例
文件 forms.html
{% macro input(name, value='', type='text') -%}
<input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
{%- endmacro %}
ProjectPage.html
{% import 'forms.html' as forms %}
<dl>
<dt>Username</dt>
<dd>{{ forms.input('username') }}</dd>
<dt>Password</dt>
<dd>{{ forms.input('password', type='password') }}</dd>
</dl>
此示例可以正常工作,因为“forms.html”模板与“ProjectPage.html”位于同一环境中。由于我可以在许多项目中使用该宏,因此我想将其放入稍后可以导入的模块中。这样做会使宏模板处于不同的环境中,导入语句会失败。
我怎样才能完成这项工作?
最佳答案
嗯, 在发布问题后不久,我最终找到了解决方案。事实证明这很容易。
看起来我们可以使用 globals
属性将变量传递到环境。我们还可以在模板对象上创建 import
语句。
因此,我将库环境传递到项目环境,然后我可以从项目模板中调用 get_template
。
env.globals['mylib'] = jinja2.Environment(loader=jinja2.PackageLoader('mylib', 'templates'))
然后在我的模板中:
{% import mylib.get_template('folder1/theTemplate.tpl') as mytemplate %}
美好的一天
关于Python 和 Jinja2 - 导入另一个环境的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44487043/