flask自定义过滤器的两种用法

之前有一篇笔记讲过了过滤器的定义和使用,但是是基于jinja2模板引擎的,可以先看看我过去的笔记:https://sulao.cn/post/551.html

其实flask内也带有过滤器,实例对象的过滤器方法是add_template_filter,他的用法有两种

我们还是按照大型项目的标准来,在工厂函数中去注册过滤器

第一种方式

我们现在统一的文件中创建过滤器函数,我的文件命令是filter.py

内容如下

#!/usr/bin/python3
#coding:utf-8
__author__ = 'yang.su'
import base64

def bs64_encode(str):
    bs64_str = base64.b64encode(str.encode("utf-8"))
    return bs64_str.decode("utf-8")

在工厂函数文件中定义一个过滤器函数

from app.filter import bs64_encode

def create_app():
    app = Flask(__name__)
    app.secret_key = 'yang.su'
    register_blueprint(app)
    configure_logger(app)
    template_filter(app)
    return app

def template_filter(app):
    app.add_template_filter(bs64_encode,'bs64_encode')

并在create_app中注册它,这样在程序启动时就被flask实例创建并注册,最后我们就可以直接在模板中使用,用法如下

{{ var | bs64_encode }}

模板变量的值就被base64转码了

第二种方式

第二种方式主要通过装饰器修饰来注册到实例中

我们在入口文件中添加函数主体

@app.template_filter()
def bs64_encode(str):
    bs64_str = base64.b64encode(str.encode("utf-8"))
    return bs64_str.decode("utf-8")

装饰器函数参数可以设置,不设置的话就是下面被装饰的函数的名字为参数

前端模板调用还是和原来一样

后面一种方式最好是在入口文件上绑定并注册,不然放置到其他文件下,需要注册上下文,才会正常

推荐还是在工厂函数中注册自定义过滤器,方便统一管理和注册

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/688.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。