使用两种不同的Jinja2环境

时间:2019-02-06 20:57:41

标签: flask jinja2

我正在制作Flask应用。在某些视图中,我需要使用LaTeX模板而不是HTML。

是否有可能创建另一个Jinja2环境并使用render_template函数选择要使用的环境?

我正在使用蓝图,并且我希望以与使用主要Jinja环境相同的方式分配template文件夹。

1 个答案:

答案 0 :(得分:0)

您可以使用Jinja的Environment.overlay方法复制Flask的环境设置,然后插入自己的模板加载器以查找特定于给定蓝图的模板(即使它们在应用程序中其他位置共享模板的名称)。 / p>

from jinja import ChoiceLoader

new_loader = ...
existing_loader = app.jinja_env.loader

new_environment = app.jinja_env.overlay(
            loader=ChoiceLoader([new_loader, existing_loader]),
            autoescape=select_autoescape(['html', 'xml'])
            )

在这里,我定义了一个新的模板加载器,并将其插入到Jinja的查找顺序的前面。这将保留所有Flask环境设置,包括变量requestapp

或者,您可以包装Flask的render_template()函数并执行相同的操作。我已经看到两种方法都已成功部署到生产中。