在py文件同级下 建立templates文件夹,再文件夹中编写html文件
1 向模版中传递参数:
1 ''' 2 1 向模板传送 参数 3 ''' 4 @app.route('/') 5 def index(): 6 name = 'Python' 7 context = { 8 'name':'Python', 9 'age' : 18 ,10 'num_list': [1,2,3,4,5,6,7,8,9,10]11 }12 return render_template('index.html',context=context,name=name )
1 2 hello world! 3 4 5{
{ context }} 6 7 姓名:{ { context['name'] }},{ { name }} 8 9 年龄:{ { context['age'] }}10 11 num_list:{ { context['num_list'] }}12 13 {% for i in context['num_list'] %}14{
{ i }}15 {% endfor %}16 17 18
2 反向路由:
1 ''' 2 2 反向路由 3 url_for(视图函数名)) 能够返回视图的相对url 4 利用redirect( url_for(视图函数) ) 实现重定向 5 ''' 6 @app.route('/redirect') 7 def redi(): 8 redir = url_for('index',_external=True) 9 print(redir)10 return redirect(redir)
3 过滤器、自定义过滤器:
1 ''' 2 3 过滤器: 3 4 safe 禁用转义{
{ 'hello' | safe }} 5 capitalize 首字母大写{
{ 'hello' | capitalize }} 6 lower 小写{
{ 'HELLO' | lower }} 7 upper 大写{
{ 'hello' | upper }} 8 title 每个单词首字母大写{
{ 'hello' | title }} 9 trim 去掉首位空格{
{ ' hello world ' | trim }}10 reverse 反转字符串{
{ 'olleh' | reverse }}11 format 格式化{
{ '%s is %d' | format('name',17) }}12 striptags 删掉html标签{
{ 'hello' | striptags }}13 14 列表操作:15 first 取第一个元素{
{ [1,2,3,4,5,6] | first }}16 last 取最后一个元素{
{ [1,2,3,4,5,6] | last }}17 length 获取列表长度{
{ [1,2,3,4,5,6] | length }}18 sum 列表求和{
{ [1,2,3,4,5,6] | sum }}19 sort 列表排序{
{ [6,2,3,1,5,4] | sort }}20 21 语句块过滤:22 {% filter upper %}23 this is a Flask Jinja2 introduction24 {% endfilter %}25 26 自定义过滤器: 两种方式27 1 app.add_template_filter(函数名,过滤器名)28 2 @app.template_filter(过滤器名)29 '''30 @app.route('/filter')31 def filter():32 str = 'abCdeF hello woRld'33 li = [1,2,5,4,3,76,65,8,9]34 return render_template('filter.html',str=str,li=li)35 # 自定义过滤器36 def hahah(li):37 return str(li)+'hahaha'38 app.add_template_filter(hahah,'hahah')39 40 @app.template_filter('heihei')41 def heihei(li):42 return str(li) + 'heihei'
1 2 { { str }} 3 4 { { str | upper }} 5 6 { { str | lower }} 7 8 { { str | capitalize }} 9 10 { { str | title }}11 12 { { str | reverse }}13 14 列表操作:15 16 { { li }}17 18 { { li | length }}19 20 { { li | first }}21 22 { { li|last }}23 24 { { li | sort }}25 26 27 块过滤:28 {% filter upper %}29 hello worldQ!30 {% endfilter %}31 32 33 自定义过滤器:34 35 { { li | hahah }}36 37 { { li | heihei }}38 39 40
4 web表单接收参数 wtf表单的使用:
1 ''' 2 3 web表单 WTForms 3 ''' 4 # 获取常规表单数据的方法 5 @app.route('/form',methods=['GET','POST']) 6 def form(): 7 if request.method == 'POST': 8 username = request.form['username'] 9 password = request.form['password']10 print(username , password)11 return render_template('form.html')12 13 14 # 利用Flask的 WTF 实现表单15 # 配置 csrf_token 的生成项16 app.config['SECRET_KEY'] = 'python12'17 # 配置表单类18 class Form(FlaskForm):19 # user字段 text类型input框 校验输入数据20 user = StringField(validators=[DataRequired()])21 # equalto 检测 与ps2 内容是否一样22 ps = PasswordField(validators=[DataRequired(),EqualTo('ps2','err')])23 ps2=PasswordField(validators=[DataRequired()])24 submit = SubmitField()25 26 # 利用Flask的 WTF 实现表单27 @app.route('/WTForm',methods=['GET','POST'])28 def wtForm():29 form = Form() # 拿到一个表单对象30 if form.validate_on_submit(): # 能够自动检验 提交的表单是否经过验证 返回True或者False31 # 获取表单数据32 user = form.user.data33 ps = form.ps.data34 ps2 = form.ps2.data35 print user,ps,ps236 if request.method == "POST":37 # flask 操作后端38 flash(u'信息发生错误!')39 40 print(form.validate_on_submit()) #能够检验 提交是否经过验证,返回True或者False41 42 43 return render_template('form.html',form=form)
1 2 普通表单: 3 411
12 WTF表单:13 27 28 29 30
4 宏的编写与使用
1 '''2 4 宏 继承 包含 模板的使用3 '''4 @app.route('/macro')5 def macro():6 return render_template('macro.html')
1 2 定义 宏 和调用 宏 3 4 {# 定义宏 #} 5 {% macro input(type,value,size) %} 6 7 {% endmacro %} 8 9 {# 调用宏 #}10 { { input('text','登陆','60') }}11 12 { { input('password','注册','20') }}13 14 15 16 引用外部宏17 18 {% import 'macros.html' as f %}19 { { f.fun() }}20 21 22 23 24
外部宏:macros.html 文件: 1 {% macro fun() %}2 3 4 5 6 7 8 {% endmacro %}