python flask框架 tempates 模版的使用

在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 <body>
 2 hello world!
 3 
 4 <br>
 5 <p> {{ context }} </p>
 6 
 7 姓名:{{ context['name'] }},{{ name }}
 8 <br>
 9 年龄:{{ context['age'] }}
10 <br>
11 num_list:{{ context['num_list'] }}
12 <br>
13 {% for i in context['num_list'] %}
14     <p>{{ i }}</p>
15 {% endfor %}
16 
17 
18 </body>

 

 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 禁用转义  <p>{{ '<em>hello</em>' | safe }}</p>
 5     capitalize 首字母大写  <p>{{ 'hello' | capitalize }}</p>
 6     lower 小写  <p>{{ 'HELLO' | lower }}</p>
 7     upper 大写  <p>{{ 'hello' | upper }}</p>
 8     title 每个单词首字母大写  <p>{{ 'hello' | title }}</p>
 9     trim 去掉首位空格   <p>{{ ' hello world ' | trim }}</p>
10     reverse 反转字符串   <p>{{ 'olleh' | reverse }}</p>
11     format 格式化  <p>{{ '%s is %d' | format('name',17) }}</p>
12     striptags 删掉html标签    <p>{{ '<em>hello</em>' | striptags }}</p>
13 
14 列表操作:
15     first 取第一个元素 <p>{{ [1,2,3,4,5,6] | first }}</p>
16     last 取最后一个元素   <p>{{ [1,2,3,4,5,6] | last }}</p>
17     length 获取列表长度    <p>{{ [1,2,3,4,5,6] | length }}</p>
18     sum 列表求和    <p>{{ [1,2,3,4,5,6] | sum }}</p>
19     sort 列表排序   <p>{{ [6,2,3,1,5,4] | sort }}</p>
20 
21 语句块过滤:
22   {% filter upper %}
23     this is a Flask Jinja2 introduction
24   {% 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 <body>
 2 {{ str }}
 3 <br>
 4 {{ str | upper }}
 5 <br>
 6 {{ str | lower }}
 7 <br>
 8 {{ str | capitalize }}
 9 <br>
10 {{ str | title }}
11 <br>
12 {{ str | reverse }}
13 <br>
14 列表操作:
15 <br>
16 {{ li }}
17 <br>
18 {{ li | length }}
19 <br>
20 {{ li | first }}
21 <br>
22 {{ li|last }}
23 <br>
24 {{ li | sort }}
25 
26 <br>
27 块过滤:
28 {% filter upper %}
29     hello worldQ!
30 {% endfilter %}
31 <br>
32 
33 自定义过滤器:
34 <br>
35 {{ li | hahah }}
36 <br>
37 {{ li | heihei }}
38 
39 
40 </body>

 

 

 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或者False
31         # 获取表单数据
32         user = form.user.data
33         ps = form.ps.data
34         ps2 = form.ps2.data
35         print user,ps,ps2
36     if request.method == "POST":
37         # flask 操作后端
38         flash(u'信息发生错误!')
39 
40     print(form.validate_on_submit()) #能够检验 提交是否经过验证,返回True或者False
41 
42 
43     return render_template('form.html',form=form)
 1 <body>
 2 普通表单:
 3 <br>
 4 <form method='post'>
 5     <input type="text" name="username" placeholder='Username'>
 6     <br>
 7     <input type="password" name="password" placeholder='password'>
 8     <br>
 9     <input type="submit">
10 </form>
11 <hr>
12 WTF表单:
13 <form method="post">
14     {{ form.csrf_token() }}
15     {{ form.user.label }}:{{ form.user }}
16     <br>
17     {{ form.ps.label }}:{{ form.ps }}
18     <br>
19     {{ form.ps2.label }}:{{ form.ps2 }}
20     <br>
21     {{ form.submit }}
22     <br>
23     {% for info in get_flashed_messages() %}
24         {{ info }}<br>
25     {% endfor %}
26 </form>
27 
28 
29 
30 </body>

 

 4 宏的编写与使用

1 '''
2 4 宏 继承 包含 模板的使用
3 '''
4 @app.route('/macro')
5 def macro():
6     return render_template('macro.html')
 1 <body>
 2 定义 宏 和调用 宏
 3 <br>
 4 {# 定义宏 #}
 5 {% macro input(type,value,size) %}
 6     <input type="{{ type }}" name="" value="{{ value }}" size="{{ size }}">
 7 {% endmacro %}
 8 
 9 {# 调用宏 #}
10 {{ input('text','登陆','60') }}
11 <br>
12 {{ input('password','注册','20') }}
13 
14 <br>
15 
16 引用外部宏
17 <br>
18 {% import 'macros.html' as f %}
19 {{ f.fun() }}
20 
21 
22 
23 
24 </body>
外部宏:macros.html 文件:
1
{% macro fun() %} 2 <input type="text" name="username" placeholde="Username"> 3 <br> 4 <input type="password" name="password" placeholde="Password"> 5 <br> 6 <input type="submit"> 7 <br> 8 {% endmacro %}

 

原文地址:https://www.cnblogs.com/Lin-Yi/p/7765172.html