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模板介绍相关推荐

  1. 【Flask】Jinja2模板的使用及控制语句

    Jinja2模板 在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单请求.实际上,视图函数有两个作用: 处理业务逻辑 返回响应内容 在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的 ...

  2. html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...

    1. 模板介绍 1.1 模板的功能 产生html,控制页面上展示的内容.模板文件不仅仅是一个html文件. 模板文件包含两部分内容: 静态内容:css.js.html. 动态内容:用于动态去产生一些页 ...

  3. Flask 的 template模板 与 jinja2语法

    Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...

  4. Flask框架之模板继承与案例05

    Flask框架之模板继承与案例05 一,模版继承 二,静态文件的配置 1.这里列举一个小例子: 三,模版案例(制作豆瓣评分页面) 1.效果图: 2.数据准备: 3.代码链接 一,模版继承 Flask中 ...

  5. 织梦模板改html教程,dedecms织梦模板介绍及制作修改

    dedecms 站长新朋友们可能对织梦模板不太了解,更不知道如何修改.下面山西SEO优化傲远为大家介绍一下织梦模板及简单的修改操作. 关于dedecms模板,我们首选要了解一下它的几个基本定义.Ded ...

  6. thymeleaf模板介绍

    作者:LoveEmperor-王子様 thymeleaf模板介绍 附所关联的Java代码 简介 基本使用 知识重点 代码示例 总结 简介 本文主要是对thymeleaf模板介绍,归纳一些常用知识点 基 ...

  7. 织梦.html和htm,织梦dedecms之article_article.htm(文章内容页模板)介绍

    在dedecms后台的默认模板管理打开article_article.htm文章内容页模板,头部tkd标签调用如下: {dede:field.title/}_{dede:global.cfg_webn ...

  8. 【从零开始vnpy量化投资】十五. 投资组合策略模板介绍

    [从零开始vnpy量化投资]十五. 投资组合策略模板介绍 概述 在之前的课程中,我们主要是使用了vnpy的cta策略模板,这个模板的特点就是只支持单一合约.如果我们需要同时对多个合约进行交易,就需要用 ...

  9. 服务器虚拟化 目标,服务器虚拟化之虚拟机和模板介绍(49页)-原创力文档

    服务器虚拟化之虚拟机和模板介绍 技术创新,变革未来 目标 ⚫ 学完本课程后,您将能够:  掌握虚拟机和模板的概念  掌握Tools 的本质和用途  掌握与虚拟机相关的操作 第1页 目录 1. 虚 ...

最新文章

  1. shell匹配IP和shell正则匹配捕获引用
  2. 学python工资高吗-我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
  3. 多列布局——column-width
  4. 02-CSS基础与进阶-day10_2018-09-14-20-38-10
  5. Docker-compose 安装Jenkins
  6. VTK:图表之CreateTree
  7. 文件“D:\file.txt”正由另一进程使用,因此该进程无法访问该文件。
  8. CF 46D Parking Lot
  9. QT学习笔记(九):遍历容器-迭代器(iterators)
  10. java invoke int long,将Long转换为Integer
  11. java读取某个文件夹下的所有文件
  12. LINUX双击无法启动解决一例
  13. Spring动态代理实现
  14. 读王弼之《老子道德經注校釋》
  15. h5物体拖动_iH5高级教程:H5交互进阶,拖动物品效果
  16. 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
  17. 负载大逃亡:四十二路怪兽联军及七条逃生法则(很喜欢)
  18. java时间加30天_java实现,怎么在当前时间往后推三十天
  19. 【python学习】如何将所绘制的图(单张多张)保存到文件夹,并用绘制实时时间命名图片
  20. 【JDK7】新特性(6) 监听文件系统的更改

热门文章

  1. SAP Connect对inbound邮件接收问题的处理和调试环境搭建
  2. 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
  3. 微信小程序开发系列教程三:微信小程序的调试方法
  4. oracle估算大小,Oracle 估算數據庫大小的方法
  5. 为什么剩余数不能相加_行测备考:如何快解数量关系中的剩余定理
  6. 怎样让电脑速度变快_双11的笔记本电脑怎么买?哪些轻薄款的最好?
  7. 结构专业规范大全_2019年一、二级注册结构师专业考试所用的规范、标准、规程...
  8. create报错不是函数_创建空文档失败,OnCreate函数报错了吗
  9. 如何查询2021广东高考英语成绩,2021广东英语听说考试成绩查询方法 什么时候查成绩...
  10. python中json模块_Python的标准模块包json的实例用法