我正在制作Flask应用。在某些视图中,我需要使用LaTeX模板而不是HTML。
是否有可能创建另一个Jinja2环境并使用render_template
函数选择要使用的环境?
我正在使用蓝图,并且我希望以与使用主要Jinja环境相同的方式分配template文件夹。
答案 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环境设置,包括变量request
和app
。
或者,您可以包装Flask的render_template()
函数并执行相同的操作。我已经看到两种方法都已成功部署到生产中。