在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. Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码

    为了最大程度地贴近Spring源码并进行学习,一种比较直接的做法是:直接在Spring源码中加入Demo代码,并进行调试. 参照以前使用Spring的经验,Spring最简单的使用方法是:一个实体类. ...

  2. c++代码的编译

    1.gcc和g++     1.1搞清楚几个名字         GCC :GNU Compiler Collection (GUN编译套件),可以编译c,c++,java,objective-c,F ...

  3. Y2K问题

    关于第五章 团队和流程 2.6 特工团队中所提到的Y2K问题,第一次接触到这个名词去百度了,它的意思是这样的:year 2K problem,又称千年虫问题.主要原因是早期的软件大多以两位数字来记录年 ...

  4. WBS

    Need 需求分析: 为了满足中老年人因工作忙碌而无暇阅读的痛苦,我们设计推广出一款听书软件.可以给中老年人带来的好处是不再受繁琐的听书软件的束缚,操作简单,携带便捷. Approach 实现方法: ...

  5. 设计模式之观察者(OBSERVER)模式

    定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.  Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...

  6. redis集群离线安装

    环境准备: redis-4.0.7.tar.gz redis的安装包 Ruby环境(集群搭建需要用ruby创建, ruby环境在2.2以上.) rubygems-2.7.4.tgz 和 redis-3 ...

  7. GDB 调试多线程多进程

    GDB是linux下的调试利器,在c/c++程序开发过程中必不可少的.这里总结一下多进程和多线程的调试方法和技巧. 多进程的调试: 如下示例 #include <sys/mman.h> # ...

  8. docker 学习之一:docker 安装

    核心概念1. 镜像是一个只读的模板类似于安装系统用到的那个iso文件我们通过镜像来完成各种应用的部署. 2. docker容器镜像类似于操作系统而容器类似于虚拟机本身.它可以被启动.开始.停止.删除等 ...

  9. Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

    注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处 ...

  10. python IDLE中反斜杠显示为人民币符号¥的解决办法

    改换英文字体即可