【Python】Flask系列-模板笔记
Jinja2模板
Jinja2模板传参
- 如何渲染模板:
- 模板放在
templates
文件夹下 - 从
flask
中导入render_template
函数。 - 在视图函数中,使用
render_template
函数,渲染模板。注意:只需要填写模板的名字,不需要填写templates
这个文件夹的路径。
- 模板放在
- 模板传参:
- 如果只有一个或者少量参数,直接在
render_template
函数中添加关键字参数就可以了。 - 如果有多个参数的时候,那么可以先把所有的参数放在字典中,然后在
render_template
中,
使用两个星号,把字典转换成关键参数传递进去,这样的代码更方便管理和使用。
- 如果只有一个或者少量参数,直接在
- 在模板中,如果要使用一个变量,语法是:
{{params}}
- 访问模型中的属性或者是字典,可以通过
{{params.property}}
的形式,或者是使用{{params['age']}}
.
示例代码
06template01 .py
#encoding: utf-8
from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():# 类class Person(object):name = u'p17bdw'age = 18p = Person()context = {'username': u'c17bdw','gender': u'男','age': 17,'person': p, # 声明'websites': {'baidu': 'www.baidu.com','google': 'www.google.com'}}return render_template('anthoer/index.html',**context)if __name__ == '__main__':app.run(debug=True)
anthoer/index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>这是HTML文件中出现的文字<p>用户名:{{ username }}</p><p>性别:{{ gender }}</p><p>年龄:{{ age }}</p><hr><p>名字:{{ person['name'] }}</p><p>年龄:{{ person.age }}</p><hr><p>百度:{{ websites['baidu'] }}</p><p>谷歌:{{ websites['google'] }}</p>
</body>
</html>
if判断
语法:
{% if xxx %} {% else %} {% endif %}
if的使用,可以和python中相差无几。
示例代码
07if_statement .py
# 输入 http://127.0.0.1:5000/1/ 为登录状态,否则为未登录状态。#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/<is_login>/')
def index(is_login):if is_login == '1':user = {'username': u'17bdw','age':20}return render_template('index.html',user=user)else:return render_template('index.html')if __name__ == '__main__':app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body>{% if user and user.age > 18 %}<a href="#">{{ user.username }}</a><a href="#">注销</a>{% else %}<a href="#">登录</a><a href="#">注册</a>{% endif %}
</body>
</html>
for循环遍历列表和字典
- 字典的遍历,语法和
python
一样,可以使用items()
、keys()
、values()
、iteritems()
、iterkeys()
、itervalues()
{% for k,v in user.items() %} <p>{{ k }}:{{ v }}</p> {% endfor %}
- 列表的遍历:语法和
python
一样。
{% for website in websites %} <p>{{ website }}</p> {% endfor %}
示例代码
08for_statement .py
#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)# for遍历字典@app.route('/')
def index():books = [{'name': u'西游记','author': u'吴承恩','price': 109},{'name': u'红楼梦','author': u'曹雪芹','price': 200},{'name': u'三国演义','author': u'罗贯中','price': 120},{'name': u'水浒传','author': u'施耐庵','price': 130}]return render_template('index.html',books=books)if __name__ == '__main__':app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><table><thead><th>书名</th><th>作者</th><th>价格</th></thead><tbody>{% for book in books %}<tr><td>{{ book.name }}</td><td>{{ book.author }}</td><td>{{ book.price }}</td></tr>{% endfor %}</tbody>
</table></body>
</html>
过滤器
- 介绍和语法:
- 介绍:过滤器可以处理变量,把原始的变量经过处理后再展示出来。作用的对象是变量。
- 语法:
{{ avatar|default('xxx') }}
- default过滤器:如果当前变量不存在,这时候可以指定默认值。
- length过滤器:求列表或者字符串或者字典或者元组的长度。
常用的过滤器:
abs(value):返回一个数值的绝对值。示例:-1|abs
default(value,default_value,boolean=false):如果当前变量没有值,则会使用参数中的值来代替。示例:name|default('xiaotuo')——如果name不存在,则会使用xiaotuo来替代。boolean=False默认是在只有这个变量为undefined的时候才会使用default中的值,如果想使用python的形式判断是否为false,则可以传递boolean=true。也可以使用or来替换。
escape(value)或e:转义字符,会将<、>等符号转义成HTML中的符号。示例:content|escape或content|e。
first(value):返回一个序列的第一个元素。示例:names|first
format(value,*arags,**kwargs):格式化字符串。比如:{{ "%s" - "%s"|format('Hello?',"Foo!") }}
将输出:Helloo? - Foo!
last(value):返回一个序列的最后一个元素。示例:names|last。length(value):返回一个序列或者字典的长度。示例:names|length。
join(value,d=u''):将一个序列用d这个参数的值拼接成字符串。
safe(value):如果开启了全局转义,那么safe过滤器会将变量关掉转义。示例:content_html|safe。
int(value):将值转换为int类型。
float(value):将值转换为float类型。
lower(value):将字符串转换为小写。
upper(value):将字符串转换为小写。
replace(value,old,new): 替换将old替换为new的字符串。
truncate(value,length=255,killwords=False):截取length长度的字符串。
striptags(value):删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。
trim:截取字符串前面和后面的空白字符。
string(value):将变量转换成字符串。
wordcount(s):计算一个长字符串中单词的个数。
示例代码
09filter_demo .py
#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():comments = [{'user': u'admin','content': 'xxxx'},{'user': u'tesr','content': 'xxxx'}]return render_template('index.html',comments=comments)if __name__ == '__main__':app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>过滤器</title>
</head>
<body># 如果avatar这个变量不存在,就使用default过滤器提供的值<img src="{{ avatar|default('http://avatar.csdn.net/1/D/B/3_hmzkekek41.jpg') }}" alt=""><hr># length 计算长度
<p>评论数:({{ comments|length }})</p>
<ul>{% for comment in comments %}<li><a href="#">{{ comment.user }}</a><p>{{ comment.content }}</p></li>{% endfor %}</ul>
</body>
</html>
继承和block
- 继承作用和语法:
- 作用:可以把一些公共的代码放在父模板中,避免每个模板写同样的代码。
- 语法:
{% extends 'base.html' %}
- block实现:
- 作用:可以让子模板实现一些自己的需求。父模板需要提前定义好。
- 注意点:字模板中的代码,必须放在block块中。
示例代码
app.py
#encoding: utf-8from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')@app.route('/login/')
def login():return render_template('login.html')if __name__ == '__main__':app.run(debug=True)
index.html
# 基础页面
{% extends 'base.html' %}{% block head %}<style></style><link rel="stylesheet" href="">{% endblock %}{% block title %}首页
{% endblock %}{% block main %}<h1>这是首页</h1>
{% endblock %}
base.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title><style>.nav{background: #3a3a3a;height: 65px;}ul{overflow: hidden;}ul li{float: left;list-style: none;padding: 0 10px;line-height: 65px;}ul li a{color: #fff;}</style>{% block head %}{% endblock %}
</head>
<body>
<div class="nav"><ul><li><a href="/">首页</a></li><li><a href="/login">发布问答</a></li></ul>
</div>
{% block main %}{% endblock %}
</body>
</html>
login.html
{% extends 'base.html' %}{% block title %}登录
{% endblock %}{% block main %}<h1>这是登录页面</h1>
{% endblock %}
url链接
使用url_for(视图函数名称)
可以反转成url。
加载静态文件
- 语法:
url_for('static',filename='路径')
- 静态文件,flask会从
static
文件夹中开始寻找,所以不需要再写static
这个路径了。 可以加载
css
文件,可以加载js
文件,还有image
文件。
```
第一个:加载css文件第二个:加载js文件
第三个:加载图片文件
```
转载于:https://www.cnblogs.com/17bdw/p/9766902.html
【Python】Flask系列-模板笔记相关推荐
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- flask系列---模板的继承及Bootstrap实现导航条(四)
在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在网页上方的导航条,并在所有的页面中继承这个导航条.导航 ...
- python flask html模板,python flask web开发实战 Jinja2模板
templates/index.html Hello World! templates/user.html Hello, {{ name }}! 渲染模板: from flask import Fla ...
- Python flask渲染模板注入
2018-TokyoWesterns-Web-shrine 参考链接: https://blog.csdn.net/Onlyone_1314/article/details/121875761 imp ...
- Python Flask框架学习笔记14
数据库一对一的关系: 实现一对一的关系,只需要在一对多的基础上,将"多"的那一端设置为"一"即可. 书上举得例子是:用户拓展表. 在公司业务增长的情况下,需要存 ...
- flask html 模板继承,Flask框架模板继承实现方法分析
Flask框架模板继承实现方法分析 本文实例讲述了Flask框架模板继承实现方法.分享给大家供大家参考,具体如下: 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有 ...
- python flask 快速搭建 WEB 实战
python flask 快速搭建 WEB 实战 tags: flask 文章目录 python flask 快速搭建 WEB 实战 1. app.py配置首页 2. views.py配置首页 3. ...
- Python框架Flask系列教程(1)——基础-黄勇-专题视频课程
Python框架Flask系列教程(1)--基础-4431人已学习 课程介绍 从初级讲解Flask开发网站.涉及到的知识点包括:URL和视图.Jinja2模版.SQLAlchemy数据 ...
- Web框架——Flask系列之Jinja2模板引擎(二)
Jinja2模板引擎简介 一.Jinja2模板概述 用来展示数据的html页面,这个过程也通常称为渲染,属于Jinja2的功能 使用模板的好处: 视图函数只负责业务逻辑和数据处理(业务逻辑方面) 而模 ...
最新文章
- 应用YOLOV4 - DeepSort 实现目标跟踪
- 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用
- Mac下Android studio 之NDK配置教程(一)
- IDC与村村乐合作服务中国农村市场
- python【数据结构与算法】一维前缀和与差分
- ajax+struts2实现总结
- 你有可能错过的东西:IIS7 ULR-Rewrite已经成为正式版本
- [016]转--C++拷贝构造函数详解
- android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果
- 爱立信数据分析解决方案抓住物联网发展机遇
- 小程序转h5之后 vant文件查找失败:_你还在使用原生开发小程序吗
- C++编程语言中调用函数时分号数量的影响分析
- 字节跳动 8 年,抖音、头条的技术能力开发者都可以用起来了!
- jenkins 出现“Error 403 No valid crumb was included in the request ”的解决方案
- 内网计算机病毒如何查杀,如何追踪并查杀局域网ARP病毒 局域网如何查杀ARP病毒...
- Oracle总结-学习这一篇就够了
- 苹果Mac键盘打不出字怎么办?
- 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题
- 《Effective STL》重读笔记整理
- 基于ADXL345三轴加速器的虚拟手柄