【问题标题】:How to use Flask's render_template() standalone without Flask app如何在没有 Flask 应用程序的情况下独立使用 Flask 的 render_template()
【发布时间】:2022-02-05 06:25:44
【问题描述】:

我正在为一个使用 render_template 的 Flask 应用程序做贡献。然而,该应用程序还利用 Celery 来安排异步任务。这些任务需要渲染一些模板,但是因为它们是由 Celery 异步执行的,所以它们没有 Flask 的应用程序上下文,我不能像通常在 Flask 控制器中那样使用render_template(例如@route(... ))。 那么,如果我没有 Flask 上下文,我该如何使用render_template

【问题讨论】:

    标签: flask celery jinja2


    【解决方案1】:

    也许你可以通过 manually pushing an app context 然后使用 Flask 的 render_template_string 函数来实现:

    >>> from flask import Flask, render_template_string
    >>> app = Flask(__name__)
    >>> with app.app_context():
    >>>     render_template_string('I love {{fruit}}', fruit='apple')
    'I love apple'
    

    当然,您可以打开一个模板文件,并传递fh.read()

    ,而不是提供一个字符串作为render_template_string的第一个参数

    根据您的实现,您可能会在此处使用render_template,尽管这会返回一个Response 对象。

    你如何处理返回值取决于你。

    【讨论】:

      【解决方案2】:

      如果你只需要渲染一个模板,你可以使用 Flask 已经导入的 jinja2 模块。

          >>> from jinja2 import Template
          >>> tpl = Template("I love {{ fruit }}")
          >>> print(tpl.render(fruit="apple"))
          'I love apple'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 2015-07-05
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多