在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. 【Unity3D与23种设计模式】策略模式(Strategy)

    GoF中定义: "定义一组算法,并封装每个算法,让它们之间可以彼此交换使用. 策略模式让这些算法在客户端使用它们时能更加独立." 游戏开发过程中 不同的角色会有不同的属性计算方法 ...

  2. sort命令与cat区别25.1 由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile [root@shiyan a]# cat a.txt aaaaaa [root@shiyan a]# sort a.txt >c.txt ------------- 在重定向前会自动创建c.txt这个文件。 [root@shiyan

    25.1 由于sort默认是把结果按照行排序后输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile[root@shiyan a]# cat a. ...

  3. Laravel框架中的make方法详解

    为什么网上已经有这么多的介绍Laravel的执行流程了,Laravel的容器详解了,Laravel的特性了,Laravel的启动过程了之类的文章,我还要来再分享呢? 因为,每个人的思维方式和方向是不一 ...

  4. vue实现懒加载的几种方法

    vue实现惰性加载是基于: 1.ES6的异步机制 components: { comp: (resolve, reject) => {} } 2. webpack的代码分割功能 require. ...

  5. Gitlab - Pull Request

    1.概述 今天查看Gmail,有网友私密我Gitlab的Pull Request工作流程,一直以为我写过这片博客,查看<Git和Gitlab协同工作>却发现遗漏了Pull Request这 ...

  6. Java中字符串indexof() 的使用方法

    Java中字符串中子串的查找共有四种方法(indexof())indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置.如果没有找到子字符串,则返回-1.如果 startind ...

  7. c++ --> 你可能不知道的c++

    你可能不知道的c++ 你可能不知道的 C++(一) 你可能不知道的 C++(二)

  8. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介

    概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议.大多数网络是按照划分成客户和服务器来组织的.本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族.下图为客户与服务器 ...

  9. Vim编辑器的注释,解注,删除与恢复

    1. 注释: 将光标移动到注释首部 命令模式下 Ctrl+V,进入列模式 上下移动,选中待注释内容 按大写I,进入插入模式 输入 // or # 按两次退出 2 解注 将光标移动到待解注首部 命令模式 ...

  10. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...