Python和Jinja2 - 导入另一个环境的模板

时间:2017-06-11 18:02:04

标签: python templates jinja2

我正在尝试构建一个使用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”位于同一环境中。由于我可以在许多项目中使用宏,我想把它放在一个我以后可以导入的模块中。这样做会使宏模板在不同的环境中,导入语句失败。

我能做到这一点吗?

1 个答案:

答案 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 %}

美好的一天