flask之jinji2模板介绍
1.1.模板传参
(1)主程序
from flask import Flask,render_templateapp = Flask(__name__)@app.route('/') def hello_world():context = {'username':'derek','age':18,'gf':{'name':'xxx','height':160}}return render_template('index.html',**context) #加双下划綫,就可以直接获取key和value了if __name__ == '__main__':app.run(debug=True)
(2)index.html
<h2>模板中渲染数据</h2><p>{{ username }}</p><p>{{ age }}</p><p>{{ gf.name }}</p><p>{{ gf['height'] }}</p>
1.2.过滤器
常用的过滤器
- abs:绝对值
- default:如果当前变量没有值,则会使用参数中的值来替代
- escape:转义字符
- first:返回一个序列的第一个元素
- format:格式化字符串
- last:返回一个序列的最后一个元素
- length:返回一个序列的长度
- join:拼接字符串
- safe:关掉转义
- int:转为int类型
- float:转为浮点类型
- lower:转换为小写
- upper:转换为答谢
- replace:替换
- truncate:截取length长度的字符串
- striptags:删除字符串中所有的html标签,如果出现多个空格,将替换成一个空格
default过滤器的使用
主程序
from flask import Flask,render_template app = Flask(__name__)@app.route('/') def hello_world():context = {'position':-9,'signature':None #个性签名 }return render_template('index.html',**context)if __name__ == '__main__':app.run(debug=True)
index.html
<h2>过滤器</h2><p>{{ position|abs }}</p><p>个性签名:{{ signature|default('此人很懒,没有留下任何说明',boolean=True) }}</p>
也可以用or的方式
<h2>过滤器</h2><p>{{ position|abs }}</p> {# <p>个性签名:{{ signature|default('此人很懒,没有留下任何说明',boolean=True) }}</p>#}<p>个性签名:{{ signature or '此人很懒,没有留下任何说明' }}</p>
1.3.自定义过滤器
过滤器本质上就是一个函数,如果在模板中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器这个函数,
然后函数的返回值会作为这个过滤器的返回值。需要使用一个装饰器:@app.template_filter('args')
实例:自定义时间处理过滤器
主程序
from flask import Flask,render_template from datetime import datetime app = Flask(__name__)@app.route('/') def hello_world():context = {'create_time':datetime(2018,5,25,17,52,10)}return render_template('index.html',**context)@app.template_filter('handle_time') #括号里面是自己给过滤器起的名字 def handle_time(time):'''1.如果时间间隔小与1分钟以内,就显示“刚刚”2.如果是1小时以内,显示“xx分钟”3.如果24h以内,显示“xx小时前”4.如果大于24小时小与30天,显示“xx天前”5.大于一个月,显示具体的时间:param time::return:'''if isinstance(time,datetime):now = datetime.now()timestamp = (now-time).total_seconds() #当前时间离创建时间的秒数if timestamp < 60: #60s以内return "刚刚"elif timestamp >= 60 and timestamp < 60*60:minutes = timestamp / 60return "%s分钟前"%int(minutes)elif timestamp >= 60*60 and timestamp < 60*60*24:hours = timestamp / (60*60)return '%s小时前'%int(hours)elif timestamp >= 60*60*24 and timestamp < 60*60*24*30:days = timestamp / (60*60*24)return '%s天前'%int(days)else:return time.strftime('%Y/%m/%d %H:%M')else:return timeif __name__ == '__main__':app.run(debug=True)
index.html
<h2>自定义时间过滤器</h2>{{ create_time|handle_time }}
1.4.if和for的使用
for中包含以下变量,可以用来获取当前的遍历状态
- loop.index
- loop.index0
- loop.first
- loop.last
- loop.length
if和for简单用法
from flask import Flask,render_templateapp = Flask(__name__) app.config.update({'DEBUG':True,'TEMPLATES_AUTO_RELOAD':True })@app.route('/') def hello_world():context = {'age':20,'users':['tom','jack','alice'],'person':{'name':'derek','age':18}}return render_template('index.html',**context)if __name__ == '__main__':app.run(debug=True)
index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body>{% if age >= 18 %}欢迎{% else %}无权限{% endif %}<ul>{% for user in users %}<li>{{ user }}</li>{% endfor %}</ul><table><thead><tr><th>用户名</th><th>年龄</th></tr></thead><tbody><tr>{% for key,value in person.items() %}<td>{{ value }}</td>{% endfor %}</tr></tbody></table></body> </html>
1.5.宏的使用和导入
模板的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用到的代码片段放到宏中,然后把一些
不固定的值抽取出来当成一个变量。
(1)简单使用实例
{# 定义一个宏,input是宏的名字,里面三个参数,可以指定默认参数值,也可以调用的传参#}{% macro input(name="",value="",type="text") %}<input name="{{ name }}" value="{{ value }}" type="{{ type }}">{% endmacro %}<form><p>用户名:{{ input('username') }}</p><p>密码:{{ input('password',type="password" )}}</p><p> {{ input(value="提交",type="submit" )}}</p></form>
(2)宏的两种导入方式
新建macros.html
{% macro input(name="",value="",type="text") %}<input name="{{ name }}" value="{{ value }}" type="{{ type }}">{% endmacro %}
index.html中导入使用宏
{#第一种#} {# with context可以把后端传到当前模板的变量传到定义的宏里面#} {% import "macros.html" as macro with context %} {#第二种#} {% from "macros.html" import input as input_field %}<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> {# 第一种#}<form><p>用户名:{{ macro.input('username') }}</p><p>密码:{{ macro.input('password',type="password" )}}</p><p> {{ macro.input(value="提交",type="submit" )}}</p></form>{# 第二种#}<form><p>用户名:{{ input_field('username') }}</p><p>密码:{{ input_field('password',type="password" )}}</p><p> {{ input_field(value="提交",type="submit" )}}</p></form></body> </html>
1.6.set、with在模板中自定义变量
(1)set
在模板中可以使用set来定义变量,一旦定义了这个变量,在后面的代码中都可以使用,index.html
{% set usernmae='derek' %}<p>用户名:{{ usernmae }}</p>
(2)with
with语句定义的变量,只能在with语句代码块(endwith)里面使用,超过代码块,就不能再使用了,set语句没有end,全局使用
{% with age=18 %}<p>年龄:{{ age }}</p>{% endwith %}
1.7.蓝图的使用
目录如下:
(1)news.py
from flask import Blueprintnews_bp = Blueprint('new',__name__,url_prefix='/news') @news_bp.route('/list/') def news_list(): return '新闻列表'
(2)user.py
from flask import Blueprint# 1.定义一个蓝图,'user':蓝图的名字,url_prefix='/user':给url加一个前缀,注意后面不要加'/' user_bp = Blueprint('user',__name__,url_prefix='/user') @user_bp.route('/profile/') def profile(): return '个人中心'
(3)bluepoint_demo.py
from flask import Flask,url_for # 2.导入 from blueprints.user import user_bp from blueprints.news import news_bp app = Flask(__name__) # 3.注册蓝图 app.register_blueprint(user_bp) app.register_blueprint(news_bp) @app.route('/') def hello_world(): return 'Hello World!' with app.test_request_context(): print(url_for('new.news_list')) # /news/list/ 通过url_for反转url的时候要加蓝图的名字 print(url_for('user.profile')) # /user/profile/ if __name__ == '__main__': app.run(debug=True)
转载于:https://www.cnblogs.com/caodneg7/p/10093780.html
flask之jinji2模板介绍相关推荐
- 【Flask】Jinja2模板的使用及控制语句
Jinja2模板 在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单请求.实际上,视图函数有两个作用: 处理业务逻辑 返回响应内容 在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的 ...
- html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...
1. 模板介绍 1.1 模板的功能 产生html,控制页面上展示的内容.模板文件不仅仅是一个html文件. 模板文件包含两部分内容: 静态内容:css.js.html. 动态内容:用于动态去产生一些页 ...
- Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...
- Flask框架之模板继承与案例05
Flask框架之模板继承与案例05 一,模版继承 二,静态文件的配置 1.这里列举一个小例子: 三,模版案例(制作豆瓣评分页面) 1.效果图: 2.数据准备: 3.代码链接 一,模版继承 Flask中 ...
- 织梦模板改html教程,dedecms织梦模板介绍及制作修改
dedecms 站长新朋友们可能对织梦模板不太了解,更不知道如何修改.下面山西SEO优化傲远为大家介绍一下织梦模板及简单的修改操作. 关于dedecms模板,我们首选要了解一下它的几个基本定义.Ded ...
- thymeleaf模板介绍
作者:LoveEmperor-王子様 thymeleaf模板介绍 附所关联的Java代码 简介 基本使用 知识重点 代码示例 总结 简介 本文主要是对thymeleaf模板介绍,归纳一些常用知识点 基 ...
- 织梦.html和htm,织梦dedecms之article_article.htm(文章内容页模板)介绍
在dedecms后台的默认模板管理打开article_article.htm文章内容页模板,头部tkd标签调用如下: {dede:field.title/}_{dede:global.cfg_webn ...
- 【从零开始vnpy量化投资】十五. 投资组合策略模板介绍
[从零开始vnpy量化投资]十五. 投资组合策略模板介绍 概述 在之前的课程中,我们主要是使用了vnpy的cta策略模板,这个模板的特点就是只支持单一合约.如果我们需要同时对多个合约进行交易,就需要用 ...
- 服务器虚拟化 目标,服务器虚拟化之虚拟机和模板介绍(49页)-原创力文档
服务器虚拟化之虚拟机和模板介绍 技术创新,变革未来 目标 ⚫ 学完本课程后,您将能够: 掌握虚拟机和模板的概念 掌握Tools 的本质和用途 掌握与虚拟机相关的操作 第1页 目录 1. 虚 ...
最新文章
- shell匹配IP和shell正则匹配捕获引用
- 学python工资高吗-我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
- 多列布局——column-width
- 02-CSS基础与进阶-day10_2018-09-14-20-38-10
- Docker-compose 安装Jenkins
- VTK:图表之CreateTree
- 文件“D:\file.txt”正由另一进程使用,因此该进程无法访问该文件。
- CF 46D Parking Lot
- QT学习笔记(九):遍历容器-迭代器(iterators)
- java invoke int long,将Long转换为Integer
- java读取某个文件夹下的所有文件
- LINUX双击无法启动解决一例
- Spring动态代理实现
- 读王弼之《老子道德經注校釋》
- h5物体拖动_iH5高级教程:H5交互进阶,拖动物品效果
- 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
- 负载大逃亡:四十二路怪兽联军及七条逃生法则(很喜欢)
- java时间加30天_java实现,怎么在当前时间往后推三十天
- 【python学习】如何将所绘制的图(单张多张)保存到文件夹,并用绘制实时时间命名图片
- 【JDK7】新特性(6) 监听文件系统的更改
热门文章
- SAP Connect对inbound邮件接收问题的处理和调试环境搭建
- 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
- 微信小程序开发系列教程三:微信小程序的调试方法
- oracle估算大小,Oracle 估算數據庫大小的方法
- 为什么剩余数不能相加_行测备考:如何快解数量关系中的剩余定理
- 怎样让电脑速度变快_双11的笔记本电脑怎么买?哪些轻薄款的最好?
- 结构专业规范大全_2019年一、二级注册结构师专业考试所用的规范、标准、规程...
- create报错不是函数_创建空文档失败,OnCreate函数报错了吗
- 如何查询2021广东高考英语成绩,2021广东英语听说考试成绩查询方法 什么时候查成绩...
- python中json模块_Python的标准模块包json的实例用法