我爱Flask之Flask模板过滤器(你想要的这都有!!) |
您所在的位置:网站首页 › jinjia2模板发明人是金佳 › 我爱Flask之Flask模板过滤器(你想要的这都有!!) |
Flask模板和宏
==黄色标注部分重点注意==一. Flask模板过滤器1. Jinja2模板内置过滤器abs(value)default(value, default_value, boolean=false)escape(value)safe(value)first(value)、last(value)和length(value)lower(value)、upper(value)replace(value, old, new)truncate(value,length=255,killwords=False)striptags(value)wordcount(s)其他过滤器
2. 自定义过滤器
黄色标注部分重点注意
一. Flask模板过滤器
1. Jinja2模板内置过滤器
•模板过滤器相当于是一个函数,把当前的变量传入过滤器,过滤器根据自己的功能对变量进行相应的处理,再返回对应的值,并将结果渲染到网页中 •过滤器是通过管道符号| 来实现的 •例如:传入变量name,{{ name|length }}将返回变量name的长度 •当你修改完模板文件后想要文件自动更新并加载,需要配置参数app.config[‘TEMPLATE_AUTO_RELOAD’] = True即可实现 Jinja2中有许多内置过滤器,以后进行一一介绍: abs(value)作用:返回传入变量的绝对值(int类型) 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True # 模板修改后自动更新并加载 @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16 } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html文件: Flask过滤器 首页 {{ name }} {{ age|abs }}网页显示: 作用:如果当前变量没有传入值,则会使用参数中的变量值来代替 例如:name|default(‘jack’)中,如果name变量未在视图函数中定义,则会使用jack来代替 参数boolean=false默认是在只有这个变量么有定义时的时候才会使用default中的默认值,如果想使用python的形式判断是否为false,则可以传递boolean=true,或者使用or来替换 运行测试: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...') }}网页显示: index.html模板代码: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username1|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ username2|default('这个人很懒,什么都没有留下...',boolean=true) }}网页显示: 作用:转义字符,会将等特殊符号转义成HTML中的符号,使其成为普通字符串,避免渲染成HTML元素。 表示方式:content|escape或content|e 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'script': ' < script > alert("hello") < / script > ' } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ script|escape}}网页显示: 作用:如果开启了全局转义,那么safe过滤器会将变量的转义关闭 表示方式:content_html|safe 在上个例子中,如果想要取消转义,可以关闭escape过滤器,测试如下: 模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {% autoescape off %} {{script}} {% endautoescape %}网页显示: 网页显示与之前完全相同 •可以使用safe过滤器渲染HTML代码 测试如下: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'code': '但行好事,莫问前程' } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201021105719259.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MjYxOTYz,size_16,color_FFFFFF,t_70#pic_center) Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ code|safe }}网页显示: 作用: first(value)返回一个序列的第一个元素,例如:names|first last(value)返回一个序列的最后一个元素,例如:names|last length(value)返回一个序列或者字典的长度,例如:names|length 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'code': '但行好事,莫问前程', 'language': ['Python', 'Java', 'PHP', 'C#'] } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ code|safe }} {{ language|first }} {{ language|last }} {{ language|length }}网页显示: 作用: lower(value):将字符串转换为小写 upper(value):将字符串转换为大写 运行测试: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ code|safe }} {{ name|lower }} {{ name|upper }}网页显示: 作用: 将字符串中old字串替换为new字符串 运行测试: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{name|replace('cx','fl')}}网页显示: 作用: 截取length长度的字符串 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'title': '不乱于心,不困于情。不畏将来,不念过往。如此,安好' } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{ title|truncate(length=12) }}网页显示: truncate()过滤器一般用于显示较长的标题省略末尾一部分内容 •注意: truncate()传入的length必须大于等于3,因为3表示省略号3个点,大于3时剩下的显示变量具体内容,小于3时渲染会报错 striptags(value)作用: 删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'script':'alert("hello")' } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{script | striptags}}网页显示: 作用: 计算一个长字符串中单词的个数,以空格间隔为一个单词 运行测试: from flask import Flask, render_template app = Flask(__name__) app.config['TEMPLATE_AUTO_RELOAD'] = True @app.route('/') def index(): context = { 'name': 'ycx', 'age': -16, 'username': 'Tony', 'address': '中国 陕西省 西安市 临潼区' } return render_template('index.html', **context) if __name__ == '__main__': app.run(debug=True)模板index.html: Flask过滤器 首页 {{ name }} {{ age|abs }} {{ username|default('这个人很懒,什么都没有留下...',boolean=true) }} {{script | striptags}} {{ address}} {{ address|wordcount }}网页显示: •format(value,*arags,**kwargs) 格式化字符串 例如:{{ “%s” - “%s”|format(‘Hello’,“World”) }}将输出Hello - World •join(value,d=‘xx’) 将一个序列用d参数的值拼接成字符串 •int(value) 将值转换为int类型 •float(value) 将值转换为float类型 •string(value) 将变量转换成字符串 •trim(value) 截取字符串前面和后面的空白字符 2. 自定义过滤器除了使用Jinja2模板内置的过滤器,还可以自定义过滤器 如下示例: 运行测试: from flask import Flask, render_template app = Flask(__name__) @app.route('/') def cut(): context = { 'word': 'Hello World' } return render_template('cut.html', **context) @app.template_filter('replace1') def replace1(value): return value.replace(' ', '---') if __name__ == '__main__': app.run(debug=True)模板cut.html: Flask模板 {{word}} {{word|replace1}}网页显示: 网页显示: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |