【问题标题】:Working with two differents Jinja2 environments使用两种不同的 Jinja2 环境
【发布时间】:2019-02-06 20:57:41
【问题描述】:

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

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

我正在使用蓝图,我想以与使用主 Jinja 环境相同的方式分配模板文件夹。

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

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

    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() 函数并执行相同的操作。我已经看到这两种方法都成功地部署在了生产环境中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 2012-02-19
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2020-10-10
      相关资源
      最近更新 更多