我有一个jinja_filters.py文件,其中包含我编写的几十个自定义过滤器。现在我有多个烧瓶应用程序需要使用这些过滤器。(我不确定我的问题是否是烧瓶特有的。)
实现我梦想的一个老生常谈的方法是:
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执行此操作。它的一个用例就是这个功能:
您只需要创建一个^{} 对象,并使用它以类似于使用} 装饰器或^{} 方法。
flask.Flask
app对象的方式注册过滤器,使用^{然后你只需要在你的应用程序对象上注册蓝图:
瞧,过滤器已经注册了。
无论您在哪里设置app对象(app.py,也许是),您只需要导入自定义过滤器,然后修改Jinja环境属性。
等等。
另一种可能是使用
inspect
模块查找jinja_filters
中的所有方法,如下所示:这段代码是未经测试的,但其思想是构建一个包含函数名和存在于
jinja_filters
文件中的函数的字典,然后用您的过滤器更新Jinja环境的过滤器字典。相关问题 更多 >
编程相关推荐