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

标签 python templates jinja2

我正在尝试构建一个使用 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/

相关文章:

python - macOS : PyQt5 conflict with opencv-python

python - 用字符串创建字典值条目

c++ - 类模板中的 Typedef 评估

c++ - 模板化运算符[] ...可能吗?有用?

html - Django 复选框样式

python - 具有有限粒子分辨率的粒子群优化

python - 具有不规则间隔样本的 2D 彩色图 (matplotlib.mlab.griddata)

c++ - 将一个 mpl 序列序列转换成一个 trie

python - 在 jinja2 模板中创建指向 Flask 应用程序 url 的链接

Ansible 模板模块不解析 with_items 变量