FLASK模板学习笔记
默认配置:
template_folder='templates' ----- 模板的默认目录
render_template() -------- (x)html自动转义
render_template_string() ---- 字符串自动转义
{% autoescape %} ------- 手动设置是否转义
全局函数和辅助对象 ------- 增强模板的功能
1.什么是转义
把有特殊意义的字符显示出来
html标签中的<>------<>
2.全局对象
config ----- Flask的配置信息
request ----- 请求对象
session ----- 会话对象
g --------- 请求相关的全局变量 (如:g.user)
url_for -------- URL解析函数(如:静态文件地址解析、链接跳转地址解析)
get_flashed_messages() ------------ 会话消息
3.模板中变量的使用
- {% ... %}用于语句 标签中可包含表达式
- {{ ... }}用于表达式可以打印到模板输出
- {# ... #}用于未包含在模板输出中的注释
- # ... ##用于行语句
app.py中
@app.route('/index')
def index():age = 40money = 34return render_template('hello.html',age=age,money=money)
hello.html中
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jianjia</title>
</head>
<body>
<p>我的年龄:{{ age }}</p>
<p>我的钱包:{{ money }}</p>
</body>
</html>
3.1模板标签内置判断条件
defined/undefined ----- 变量是否已经定义
none ----- 变量是否为None
number/string ----- 数字/字符串判断
even/odd ----- 奇偶判断
upper/lower --------- 大小写判断
3.2for循环体内的变量
变量 | 描述 |
loop.index | 当前循环迭代的次数(从1开始) |
loop.index0 | 当前循环迭代的次数(从0开始) |
loop.revindex | 到循环结束需要迭代的次数(从1开始) |
loop.revindex0 |
到循环结束需要迭代的次数(从0开始) |
在for循环中使用continue/break
在app.py中加入
app = Flask(__name__)
app.jinja_env.add_extension('jinja2.ext.loopcontrols')
for循环中奇偶行设置不同样式
<li class="{{ loop.cycle('odd','even') }}"></li>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jianjia</title>
</head>
<style>.odd{color: green;}.even{color: red;}
</style>
<body>{% for k in user %}{% if k%4==0 and k%100!=0 or k%400==0 %}<li class="{{ loop.cycle('odd','even') }}">{{ k }}年是闰年</li>{% else %}<li class="{{ loop.cycle('odd','even') }}">{{ k }}年不是闰年</li></li>{% endif %}{% endfor %}
</ol></body>
</html>
3.3模板标签
设置变量,赋值操作,可以通过import导入
{% set key,value = (1,2) %}
使用with代码块,实现块级作用域
{% with %}
{% set value = 42 %}
{{value}} 只在代码块中有效
{% endwith %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jianjia</title>
</head>
<body><h3>赋值的使用</h3>
{% with %}{% set temp = 43 %}{{ temp }}{% endwith %}
</body>
</html>
3.4模板语法的转义
- 方式一:视为字符串
- 方式二:使用raw标签
{% raw %}
......
{% endraw %}
4.过滤器
过滤器,修改变量(如:格式化显示)
用管道符号(|)分割{{ name|striptags }}
可以链式调用
可以用圆括号传递可选参数
4.1、过滤器的使用方式
方式一:用管道符号(|)
{{ value|safe }}
方式二:使用标签
{% filter upper %}
......
{% endfilter %}
4.2 内置过滤器
1.求绝对值:{{ value|abs }}
2.默认值显示: default(value,default_value="",boolean=False)
{{ value|default('默认值') }}
{{ value|d('默认值') }}
3.html转义:{{ value|escape }}或 {{ value | e}}
4.富文本内容转义显示:{{ value|safe }}
5.倒序显示:{{ value|reverse }}
4.3 自定义过滤器
方式一:使用装饰器注册
@app.template_filter('reverse')
def reverse_filter(s):
return s[::-1]
方式二:调用函数注册
def reverse_filters(s):
return s[::-1]
app.jinja_env.filters['reverse'] = reverse_filter
@app.template_filter('phone_format')
def phone_format(phone_num):"""电话号码过滤器"""return phone_num[0:3]+ '****' + phone_num[7:]
<h3>自定义过滤器的使用</h3>
<p>{{ phone|phone_format }}</p>
5.模板全局函数
- range([start],stop[step])
- dict(**items)
- cycler(*items) ---- 可用于css类名的循环
- joiner(stp=',') ---- 可用于字符串的拼接
- url_for ----- URL解析函数(如:静态文件地址解析、链接跳转地址解析)
<h3>cycler函数的使用</h3>
{% set class_name = cycler('row1','row2') %}
{% for i in range(100) %}<p class="{{ class_name.next() }}">{{ i }}</p>
{% endfor %}<h3>url_for函数的使用</h3>
<!--req是函数名 -->
<a href="{{ url_for('req') }}">点我跳转</a>
6.模板中的宏
- 把常用功能抽取出来,实现可重用
- 简单理解:宏≈函数
- 宏可以写在单独的html文件中
<h3>模板中的宏</h3>
{% macro input(name,type='text',value='') %}<div><input type="{{ type }}" name="{{ name }}" value="{{ value }}"></div>
{% endmacro %}{{ input(name='username',value='admin') }}
6.1 文件中宏的使用
1.将前面定义的宏保存为forms.html
2.导入:
{% import 'forms.html' as forms %}
{% from 'forms.html' import input %}
3.使用:<p>{{ forms.input('username') }} </p>
7.模板的继承
步骤一:将可变的部分圈出来(base.html)
{% block content %}
内容区域
{% endblock %}
步骤二:继承父模板
{% extands 'base.html' %}
8.消息闪现
第一步:在视图中产生一个消息(提示/警告/错误)
flash(msg_content,msg_type)
参数msg_content:消息内容
参数msg_type:消息类型
第二步:在模板中展示消息
get_flashed_messages(category_filter=["error"])
参数category_filter:对产生的消息按类别查询
FLASK模板学习笔记相关推荐
- Mustache模板学习笔记
Mustache模板学习笔记 1 初体验 1.1 还可以对象形式做数据源 1.2 {{#param}}这个标签很强大,有if判断.forEach的功能. 1.2.1 如果迭代的是数组,还可以用{{.} ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的"章节7:创建TPL自定义模板",做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. ...
- C++模板学习笔记——模板实参
对于函数模板,编译器通过隐式推断模板实参.其中,从函数实参来确定模板实参的过程被称为模板实参推断.在模板实参推断过程中,编译器使用函数调用中的实参类型来寻找模板实参,用这些模板实参生成的函数版本与给定 ...
- flask框架学习笔记
flask_day01 pycharm创建项目,连接到远程gitee仓库,创建仓库flask_study,分支helloworld, 自带第一个程序"helloworld",运行程 ...
- “模板”学习笔记(7)-----数组模板+对象数组举例
我们可以定义一个数组模板,并且利用该模板声明其数组成员.声明的方式非常简单,主需要一下两步: template<class ElementType,int n>; ElementType ...
- Flask框架学习笔记(1)
1.Flask简介 Flask和Django一样,也是一个基于MVC设计模式的Web框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 wdb 应用程序可以使一 ...
- Python Flask框架学习笔记14
数据库一对一的关系: 实现一对一的关系,只需要在一对多的基础上,将"多"的那一端设置为"一"即可. 书上举得例子是:用户拓展表. 在公司业务增长的情况下,需要存 ...
- 网络编程flask一些学习笔记摘抄(一)
来源:Flask---框架快速入门_菜鸟可以飞的博客-CSDN博客_flask (下面大多资料与来源文档一样,这里只是本人做了一些标注,建议直接看来源) 先来一个每个教程都有的简单例子: from f ...
- 黄勇-flask教程-学习笔记
课时4-虚拟环境 pip install virtualenv #安装虚拟环境 virtualenv venv ...
最新文章
- python基础---模块与包
- R语言数据挖掘实践——系谱聚类
- 创建索引的方法有两种
- 申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~
- NET防SQL注入方法
- MySQL不能启动 Can't start server : Bind on unix socket: Permission denied
- vue 进入首页只弹一个弹框_vue.js实现只弹一次弹框
- 基于python的文件处理
- Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
- 规定计算机系统实现安全等级保护,计算机信息系统安全等级保护标准体系包括:信息系统安全保.DOC...
- cad pu插件下载lisp_25个常用CAD插件 合集 下载
- Java扫雷游戏的设计与实现毕业设计论文
- Linux 内核的网络协议栈
- c语言实验编码sdut,C语言实验一(1)
- 使用深度学习技术进行水印去除
- VUE移动端案例整合
- thinkphp5拼接数组查询条件
- arcgis api 4.X 加载天地图3D
- android MD风格组件(BottomNavigationView,配合lottie使用) (三)
- 亚特兰蒂斯_亚特兰蒂斯的命运与可下载内容的作用
热门文章
- TortoiseGit的使用详解
- 京东个人版C店即将上线
- CAD快速看图软件如何修改文字的样式
- 隆昌一中高考成绩查询2021四川,四川内江排名靠前的四大高中,有争议?2020年高考成绩说话!...
- 七、Kali Linux 2 渗透攻击
- 2020年Java框架排行榜,谁居榜首?
- weui uploader java_Weui 文件上传完整版示例
- CRC16-XMODEM 计算方法 | C语言实现
- Android Framework学习(八)之Handler消息机制(Native层)解析
- 真的以为看过几本理财书籍就能实现财富自由?