之前有一篇笔记讲过了过滤器的定义和使用,但是是基于jinja2模板引擎的,可以先看看我过去的笔记:https://sulao.cn/post/548
其实flask内也带有过滤器,实例对象的过滤器方法是add_template_filter,他的用法有两种
我们还是按照大型项目的标准来,在工厂函数中去注册过滤器
第一种方式
我们现在统一的文件中创建过滤器函数,我的文件命令是filter.py
内容如下
01.#!/usr/bin/python302.#coding:utf-803.__author__ = 'yang.su'04.import base6405. 06.def bs64_encode(str):07. bs64_str = base64.b64encode(str.encode("utf-8"))08. return bs64_str.decode("utf-8")
在工厂函数文件中定义一个过滤器函数
01.from app.filter import bs64_encode02. 03.def create_app():04. app = Flask(__name__)05. app.secret_key = 'yang.su'06. register_blueprint(app)07. configure_logger(app)08. template_filter(app)09. return app10. 11.def template_filter(app):12. app.add_template_filter(bs64_encode,'bs64_encode')
并在create_app中注册它,这样在程序启动时就被flask实例创建并注册,最后我们就可以直接在模板中使用,用法如下
01.{{ var | bs64_encode }}
模板变量的值就被base64转码了
第二种方式
第二种方式主要通过装饰器修饰来注册到实例中
我们在入口文件中添加函数主体
01.@app.template_filter()02.def bs64_encode(str):03. bs64_str = base64.b64encode(str.encode("utf-8"))04. return bs64_str.decode("utf-8")
装饰器函数参数可以设置,不设置的话就是下面被装饰的函数的名字为参数
前端模板调用还是和原来一样
后面一种方式最好是在入口文件上绑定并注册,不然放置到其他文件下,需要注册上下文,才会正常
推荐还是在工厂函数中注册自定义过滤器,方便统一管理和注册
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/685
评论列表