在py文件同级下 建立templates文件夹,再文件夹中编写html文件

1 向模版中传递参数:

 '''
1 向模板传送 参数
'''
@app.route('/')
def index():
name = 'Python'
context = {
'name':'Python',
'age' : 18 ,
'num_list': [1,2,3,4,5,6,7,8,9,10]
}
return render_template('index.html',context=context,name=name )
 <body>
hello world! <br>
<p> {{ context }} </p> 姓名:{{ context['name'] }},{{ name }}
<br>
年龄:{{ context['age'] }}
<br>
num_list:{{ context['num_list'] }}
<br>
{% for i in context['num_list'] %}
<p>{{ i }}</p>
{% endfor %} </body>

2 反向路由:

 '''
2 反向路由
url_for(视图函数名)) 能够返回视图的相对url
利用redirect( url_for(视图函数) ) 实现重定向
'''
@app.route('/redirect')
def redi():
redir = url_for('index',_external=True)
print(redir)
return redirect(redir)

3 过滤器、自定义过滤器:

 '''
3 过滤器: safe 禁用转义 <p>{{ '<em>hello</em>' | safe }}</p>
capitalize 首字母大写 <p>{{ 'hello' | capitalize }}</p>
lower 小写 <p>{{ 'HELLO' | lower }}</p>
upper 大写 <p>{{ 'hello' | upper }}</p>
title 每个单词首字母大写 <p>{{ 'hello' | title }}</p>
trim 去掉首位空格 <p>{{ ' hello world ' | trim }}</p>
reverse 反转字符串 <p>{{ 'olleh' | reverse }}</p>
format 格式化 <p>{{ '%s is %d' | format('name',17) }}</p>
striptags 删掉html标签 <p>{{ '<em>hello</em>' | striptags }}</p> 列表操作:
first 取第一个元素 <p>{{ [1,2,3,4,5,6] | first }}</p>
last 取最后一个元素 <p>{{ [1,2,3,4,5,6] | last }}</p>
length 获取列表长度 <p>{{ [1,2,3,4,5,6] | length }}</p>
sum 列表求和 <p>{{ [1,2,3,4,5,6] | sum }}</p>
sort 列表排序 <p>{{ [6,2,3,1,5,4] | sort }}</p> 语句块过滤:
{% filter upper %}
this is a Flask Jinja2 introduction
{% endfilter %} 自定义过滤器: 两种方式
1 app.add_template_filter(函数名,过滤器名)
2 @app.template_filter(过滤器名)
'''
@app.route('/filter')
def filter():
str = 'abCdeF hello woRld'
li = [1,2,5,4,3,76,65,8,9]
return render_template('filter.html',str=str,li=li)
# 自定义过滤器
def hahah(li):
return str(li)+'hahaha'
app.add_template_filter(hahah,'hahah') @app.template_filter('heihei')
def heihei(li):
return str(li) + 'heihei'
 <body>
{{ str }}
<br>
{{ str | upper }}
<br>
{{ str | lower }}
<br>
{{ str | capitalize }}
<br>
{{ str | title }}
<br>
{{ str | reverse }}
<br>
列表操作:
<br>
{{ li }}
<br>
{{ li | length }}
<br>
{{ li | first }}
<br>
{{ li|last }}
<br>
{{ li | sort }} <br>
块过滤:
{% filter upper %}
hello worldQ!
{% endfilter %}
<br> 自定义过滤器:
<br>
{{ li | hahah }}
<br>
{{ li | heihei }} </body>

4 web表单接收参数 wtf表单的使用:

 '''
3 web表单 WTForms
'''
# 获取常规表单数据的方法
@app.route('/form',methods=['GET','POST'])
def form():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
print(username , password)
return render_template('form.html') # 利用Flask的 WTF 实现表单
# 配置 csrf_token 的生成项
app.config['SECRET_KEY'] = 'python12'
# 配置表单类
class Form(FlaskForm):
# user字段 text类型input框 校验输入数据
user = StringField(validators=[DataRequired()])
# equalto 检测 与ps2 内容是否一样
ps = PasswordField(validators=[DataRequired(),EqualTo('ps2','err')])
ps2=PasswordField(validators=[DataRequired()])
submit = SubmitField() # 利用Flask的 WTF 实现表单
@app.route('/WTForm',methods=['GET','POST'])
def wtForm():
form = Form() # 拿到一个表单对象
if form.validate_on_submit(): # 能够自动检验 提交的表单是否经过验证 返回True或者False
# 获取表单数据
user = form.user.data
ps = form.ps.data
ps2 = form.ps2.data
print user,ps,ps2
if request.method == "POST":
# flask 操作后端
flash(u'信息发生错误!') print(form.validate_on_submit()) #能够检验 提交是否经过验证,返回True或者False return render_template('form.html',form=form)
 <body>
普通表单:
<br>
<form method='post'>
<input type="text" name="username" placeholder='Username'>
<br>
<input type="password" name="password" placeholder='password'>
<br>
<input type="submit">
</form>
<hr>
WTF表单:
<form method="post">
{{ form.csrf_token() }}
{{ form.user.label }}:{{ form.user }}
<br>
{{ form.ps.label }}:{{ form.ps }}
<br>
{{ form.ps2.label }}:{{ form.ps2 }}
<br>
{{ form.submit }}
<br>
{% for info in get_flashed_messages() %}
{{ info }}<br>
{% endfor %}
</form> </body>

4 宏的编写与使用

 '''
4 宏 继承 包含 模板的使用
'''
@app.route('/macro')
def macro():
return render_template('macro.html')
 <body>
定义 宏 和调用 宏
<br>
{# 定义宏 #}
{% macro input(type,value,size) %}
<input type="{{ type }}" name="" value="{{ value }}" size="{{ size }}">
{% endmacro %} {# 调用宏 #}
{{ input('text','登陆','60') }}
<br>
{{ input('password','注册','20') }} <br> 引用外部宏
<br>
{% import 'macros.html' as f %}
{{ f.fun() }} </body>
外部宏:macros.html 文件:
1 {% macro fun() %}
<input type="text" name="username" placeholde="Username">
<br>
<input type="password" name="password" placeholde="Password">
<br>
<input type="submit">
<br>
{% endmacro %}

python flask框架 tempates 模版的使用的更多相关文章

  1. Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架

    今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...

  2. python flask框架学习——开启debug模式

    学习自:知了课堂Python Flask框架——全栈开发 1.flask的几种debug模式的方法 # 1.app.run 传参debug=true app.run(debug=True) #2 设置 ...

  3. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  4. python flask框架学习(一)——准备工作和环境配置与安装

    Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...

  5. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...

  6. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  7. Python Flask框架路由简单实现

    Python Flask框架路由的简单实现 也许你听说过Flask框架.也许你也使用过,也使用的非常好.但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好 ...

  8. Python——Flask框架——程序的结构

    一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...

  9. python Flask框架mysql数据库配置

    我是一个没有笔记习惯的低级程序员,但是我还是喜欢编程,从小学就开始跟着玩电脑,对抓鸡,ddos,跳板刷钻开始了自己的IT 旅程,之后学习了各种语言,但是可惜都不没有达到精通,都是略懂一二,现在想把Py ...

随机推荐

  1. [UWP]理解ControlTemplate中的VisualTransition

    1. 前言 VisualTransition是控件模板中的重要组成部分,无论是自定义控件或者修改控件样式都会接触到VisualTransition.明明这么重要,博客园上好像都没多少关于VisualT ...

  2. Centos虚拟机克隆模板

    Centos6模板 IPTABLES/SELINUX # iptalbes -F # service iptables save 或 # /etc/init.d/iptables stop # chk ...

  3. push_back和emplace_back的区别

    emplace_back能就地通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升.在大多数情况下应该优先使用emplace ...

  4. 笔记:JDBC 数据库

    数据库 URL 在连接数据库时,我们必须使用各种与数据库类型相关的参数,例如主机名.端口号和数据库名称等,JDBC使用了一种与普通URL相类似的语法来描述数据库,JDBC URL 一般语法为: jdb ...

  5. heartbeat错误排查

    错误一: [root@snale2 ha.d ::]#service heartbeat start Starting High-Availability services: INFO: Resour ...

  6. Django+xadmin打造在线教育平台(七)

    十.授课教师 10.1.讲师列表页 拷贝teacher-list.html和teacher-detail.html到templates目录下 先改teacher-list.html,同样继承base. ...

  7. android studio视频教学

    英语+中文字幕: http://www.apkbus.com/plugin.php?id=buskc&modo=learn&kcid=82 中文字幕: http://www.maizi ...

  8. Oracle中死锁与等待

    在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(即S锁).当数据对象被加上排它锁时,其他的事务不能不  能对它读取和修改.加了共享锁的数据对象可以被其他事务读取 ...

  9. Java 并发编程实践基础 读书笔记: 第二章 构建线程安全应用程序

    1,什么是线程安全性? 简单概括就是一个类在多线程情况下能安全调用就是线程安全 2,Servlet  的线程安全性  默认是非线程安全的,写servlet代码的时候需要注意线程安全,注意同步 3,vo ...

  10. linux小白成长之路7————Docker安装mysql

    [内容指引] 从Docker检索mysql镜像: Mysql Docker镜像下载: 查看本地镜像列表: 设置Mysql的Docker镜像开机自动运行: 常用Docker指令及参数: 1.从Docke ...