flask第二十二篇——模板【4】过滤器
请关注微信公众号:自动化测试实战
先来教大家一个pycharm设置默认模板的方法。我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8
这些代码,其实我们可以设置好模板,让它自动生成的:
-
打开pycharm的
setting
(windows)或者preference
(Mac) -
进入:
就可以看到:
右侧就是默认生成的模板了,在这里改成默认生成的代码,以后就不用每次都写那些固定的代码了。
现在我把代码改为:
这样每次我新建flask项目的时候默认就会生成这个模板了。
今天和接下来几天我们继续介绍模板,然后会有一个小项目,不会HTML也没关系,跟着船长一起写就可以了,等学完了flask你发现你会html
了,也懂数据库的增删改查
了,船长本来想专门讲前端的,后来觉得还是一起说算了,毕竟要不然时间就拖太长了。
过滤器:abs——绝对值
文件结构:
flaskDemo.py
# coding: utf-8 from flask import Flask, render_template import flask app = Flask(__name__) # type: Flask app.debug = True @app.route('/') def login(): context = { "name": "Warren", "age": -18 } return render_template('index.html', **context) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>{{ age | abs }}</p> </body> </html>
在flaskDemo.py
文件中age
值是-18
,如果我们在index.html
文件中直接用{{ age }}
那么页面返回的值就是-18,现在我们上面的代码给加了一个过滤器,就是age | abs
后面的| abs
就是一个过滤器
了。在Python里,abs
代表取绝对值
。现在再执行代码,发现页面返回的就是18了。
在| abs
中,|
叫做管道
,所以过滤器
就是在变量上,通过管道符号 | 加过滤器名称
来使用的。
过滤器:default——默认值
我们再讲一个过滤器——default
,代码:
flaskDemo.py
# coding: utf-8 from flask import Flask, render_template import flask app = Flask(__name__) # type: Flask app.debug = True @app.route('/') def login(): context = { "user": { "name": "Warren", "age": -18} } return render_template('index.html', **context) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>绝对值:{{ user.age | abs }}</p> <p>默认值:{{ user.gender | default }}</p> </body> </html>
上面user.gender
在.py
文件里context
里是没有这个key的,我们现在执行代码:
看到默认值是空,现在把代码改为{{ user.gender | default('male') }}
也就是我们给gender
这个key传一个默认值:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>绝对值:{{ user.age | abs }}</p> <p>默认值:{{ user.gender | default('male') }}</p> </body> </html>
执行代码,看到:
此外,default
还可以传一个布尔类型的值,默认是False,就是说如果前面的值有值,那么就返回原值,如果没值(None,False)——False的情况,就用过滤器里面的值:
# coding: utf-8 from flask import Flask, render_template import flask app = Flask(__name__) # type: Flask app.debug = True @app.route('/') def login(): context = { "user": { "name": "Warren", "age": -18, "gender": None} } return render_template('index.html', **context) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>绝对值:{{ user.age | abs }}</p> <p>默认值:{{ user.gender | default('male', True) }}</p> </body> </html>
上面代码我们给default
传了两个值,第二个是True
,这时候执行代码,看到的默认值就是male
:
如果default
传False
,{{ user.gender | default('male', False) }}
那么页面返回的就是None
。
除了上面的写法以外,还以用or
代替,这种情况就是不使用过滤器:.py
文件不变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>绝对值:{{ user.age | abs }}</p> <p>默认值:{{ user.gender or 'male'}}</p> </body> </html>
执行代码:
过滤器:转义
直接看代码比较方便:
flaskDemo.py
# coding: utf-8 from flask import Flask, render_template import flask app = Flask(__name__) # type: Flask app.debug = True @app.route('/') def login(): context = { "user": { "name": "Warren", "age": -18, "gender": None, "comment": u'<script>alert("弹出框")</script>'} } return render_template('index.html', **context) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>过滤器</title> </head> <body> <p>绝对值:{{ user.age | abs }}</p> <p>默认值:{{ user.gender or 'male'}}</p> <p>转义:{{ user.comment }}</p> </body> </html>
执行代码,看到页面返回的就是我们.py
文件里写的,内容:
现在修改<p>转义:{{ user.comment }}</p>
为<p>转义:{{ user.comment | safe }}</p>
,再执行代码:
看到页面弹出了alert
框,也就是说写的js
代码生效了,在js中,弹出框就是<script>alert('提示信息')</script>
(大家平时做测试时候也可以在输入框里输入一下这个,看一下开发们对这个有没有处理)。这就是safe
过滤器的作用。
明天我们继续讲几个过滤器。今天这个大家趁着休息去试试吧~