我正在尝试构建一个使用Jinja2 tempalting的项目。我想有一种模板库,我可以在许多其他项目中导入。我遇到的问题是我找不到从我的项目模板中包含/导入此库中的模板的方法。
举个例子,我们可以使用我们在Jinja2文档中找到的相同示例here
File 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”位于同一环境中。由于我可以在许多项目中使用宏,我想把它放在一个我以后可以导入的模块中。这样做会使宏模板在不同的环境中,导入语句失败。
我能做到这一点吗?
答案 0 :(得分:1)
那么, 在发布我的问题后不久,我找到了解决方案。事实证明这很容易。
看起来我们可以使用globals
属性将变量传递给环境。我们还可以在模板对象上创建import
语句。
所以我将我的图书馆环境传递给我的项目环境,我可以从我的项目模板中调用get_template
。
env.globals['mylib'] = jinja2.Environment(loader=jinja2.PackageLoader('mylib', 'templates'))
然后在我的模板中:
{% import mylib.get_template('folder1/theTemplate.tpl') as mytemplate %}
美好的一天