gpt4 book ai didi

python - 如何从另一个文件(并使用 Flask)导入自定义 jinja2 过滤器?

转载 作者:IT老高 更新时间:2023-10-28 20:56:52 26 4
gpt4 key购买 nike

我有一个 jinja_filters.py 文件,其中包含我编写的几十个自定义过滤器。现在我有多个需要使用这些过滤器的 Flask 应用程序。 (我不确定我的问题是否与 Flask 相关。)

完成我想做的事情的一个 hacky 方法是:

app = Flask(__name__)

import jinja_filters

@app.template_filter('filter_name1')
def filter_name1(arg):
return jinja_filters.filter_name1(arg)

@app.template_filter('filter_name2')
def filter_name2(arg):
return jinja_filters.filter_name2(arg)

...

这样做的“正确”方法是什么?

编辑:理想情况下,我不必列出每个过滤器名称。因此,当我向 jinja_filters.py 添加新过滤器时,我无需更新任何其他代码——我的所有应用程序都可以立即使用它。

最佳答案

推荐使用 Flask blueprints 的方法来执行此操作。 .它的一个用例就是这个功能:

  • Provide template filters, static files, templates, and other utilities through blueprints. A blueprint does not have to implement applications or view functions.

您只需要创建一个 flask.Blueprint对象并使用它以与 flask.Flask 应用程序对象类似的方式注册您的过滤器,使用 Blueprint.app_template_filter装饰师或 Blueprint.add_app_template_filter方法。

# filters.py

import jinja2
import flask

blueprint = flask.Blueprint('filters', __name__)

# using the decorator
@jinja2.contextfilter
@blueprint.app_template_filter()
def filter1(context, value):
return 1

# using the method
@jinja2.contextfilter
def filter2(context, value):
return 2

blueprint.add_app_template_filter(filter2)

那么你只需要在你的应用对象上注册蓝图:

# app.py

import flask
import filters

app = flask.Flask(__name__)
app.register_blueprint(filters.blueprint)

瞧,过滤器已注册。

关于python - 如何从另一个文件(并使用 Flask)导入自定义 jinja2 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com