简介
在flask框架中通常使用Jinja2模板引擎来实现复杂页面的渲染。
本章主要介绍Jinja2模板引擎的基本结构和使用方法。

  • 如何使用flask框架渲染模板
  • 在模板中传递一个或者多个参数
  • if语句在模板中的运用
  • for语句在模板中的使用
    模板的实质上是一个静态包含HTML语法的全部或者片段的文本,也可包含由变量表示的动态部分

from flask import Flask  # 导入flask框架模板from flask import render_template#导入render_template模块

app = Flask(__name__)  # flask实例化@app.route('/')  # 定义路由def index():  # 定义试图函数

return render_template('index.html')  # 返回值,使用render_template方法渲染模板@app.route('/user/<username>')  # 定义路由,传递的参数名是<username>,需要在函数的形参中定义同名的参数def user(username):#定义视图函数

return render_template('user.html')  # 渲染if __name__ == '__main__':  # 运行

app.run(debug=True)

注意:在templelates的文件下创建index.html和user.html,加载并且自行测试渲染。flask框架是通过render_template()函数来实现模板的渲染,要使用Jinja2模板引擎,需要使用from flask render_template命令导入render_template函数。
向模板中传递参数
flask 提供Jinja2模板来渲染模板的同时,还可以将程序中的参数或变量传递到指定的模板进行渲染
inde.html(值写出了不同的部分)

<title>这是首页<\title>

<h1>首页中的文字<\h1>

user.html

<title>这是用户中心<\title>

<h1>欢迎您:{{name}}<\h1>

app.py

from flask import Flask  # 导入flask框架模板from flask import render_template#导入render_template模块

app = Flask(__name__)  # flask实例化@app.route('/')  # 定义路由def index():  # 定义试图函数

return render_template('index.html')  # 返回值,使用render_template方法渲染模板@app.route('/user/<username>')  # 定义路由,传递的参数名是<username>,需要在函数的形参中定义同名的参数def user(username):#定义视图函数

return render_template('user.html',name=username)  # 渲染if __name__ == '__main__':  # 运行

app.run(debug=True)#render_template()函数第一个参数是指定模板文件的名称,第二个参数一般用于传递变量。

模板中接收变量值,需要把变量值放在{{}},如{{val}}等。模板中如果要写注释的话个格式为{##}如{#br表示的是回车}
如果视图函数中有多个变量值,都需要传递给模板,可以使用**locals()方法。

def index():

#return render_template('index.html')

title='python键值对'#定义键值

author='tom_jack'#定义键值

return render_template('index.html',**locals)#渲染模板并传值**locals可以换成x=title,y=author页面中要有x,y变量。

主要如果使用**locals方法,此时模块中的{{title}}和{{author}}来可以直接使用。
模板之中的if控制语句
在Jinja2引擎模板中也可以使用if和for循环控制语句,控制模板的渲染的方向。

{%if condition %} <!--condition是指的是条件>

{% else %}<!--条件不满足>

{% endif %}<!--结束if语句>

index.html

<body>

{%if name %}<!--name值是否存在>

<h1>产生随机有效数</h1>

{%else%}<!-- name值不存在>

<h1>产生的随机数无效</h1><!-- name值不存在,则输出产生的随机数>

</body>

{{name}}

app.py

@app.route('/')def hello world():

rand1=random.randint(0,1)

return render_template('index.html',name=rand1)

{%if condition %} <!--condition是指的是条件>

{% elif %}<!-- 其他的条件>

{% else %}<!--条件不满足>

{% endif %}<!--结束if语句>

index.html

<body>

{%if name==1%}<h1>恭喜你抽取一等奖</h1>

{%elif name==2%}<h1>恭喜你抽取二等奖</h1>

{%else%}<h1>恭喜你抽取三等奖</h1>

{%endif%}

{{name}}</body>

app.py

@app.route('/')def hello world():

rand1=random.randint(1,3)

return render_template('index.html',name=rand1)

在模板中要尽量少使用if..else...语句,应该尽量多使用if..elif...else...的结构(多个elif)
注意:

  • 模板中的表达式的分隔符{{}}内的
  • 控制语句都是包含在{%%}
  • 模板中的注释符{##}

模板中的控制语句之for语句

for 目标 in 对象

循环体

在模板中

{% for 目标 in 对象%}

<p>目标</p>

<% endfor %>

Jinja2中for循环常量

  • loop.index:当前迭代的索引(从1开始)
  • loop.index0:当前迭代索(从0开始)
  • loop.first:是否是第一次迭代
  • loop.last:是否是最后一次迭代
  • loop.length:返回序列的长度
    shop.html

<!DOCTYPE html><html lang="en"><head>

<meta charset="UTF-8">

<title>Title</title></head><body><table>

<thead>

<th>商品名称</th>

<th>商品的价格</th>

</thead>>

<tbody><meta charset="UTF-8">

{% for goods in goods %}<tr>

<td>{{ goods.name }}</td>

<td>{{ goods.price }}</td></tr>

{% endfor %}</tbody>

</thead></table></body></html>

app.py

from flask import Flask  # 导入flask框架模板from flask import render_template

app = Flask(__name__)  # flask实例化@app.route('/')  # 定义路由def index():  # 定义试图函数

goods = [{'name': '秋装上衣', 'price': 100},

{'name': '西装上衣', 'price': 190},

{'name': '新款上衣', 'price': 180}]

return render_template('shop.html', **locals())if __name__ == '__main__':  # 运行

app.run(debug=True)

注意:使用if条件判断语句或者是for循环的语句,可以帮助开发者更好的渲染模板,通过{% 逻辑表达式%},可以实现代码的嵌套,其语法与python的语法基本一致,但是必须包含在{% %}内部
flask过滤器
过滤器的本质是一个转换函数,有时候我们不仅要输出变量的值,还需要把某个变量的值修改之后显示出来。
1.与字符串相关的过滤器

{{name|default('none'true)}}

  • 其中name是变量名,name为空则为None

{{'hello'|capitalize}}

  • 将字符串实现首字母大写

{{'HELLO'|lowere}}

  • 将全部的字符串转换成为小写

{{'hello'|replace('h','x')}}

  • 将hello中的小写字母转换成为x

2.对列表进行相关操作的过滤器

{{[01,80,42,44,77]|first}}

  • 取得列表中的首个元素01

{{[01,80,42,44,77]|last}}

  • 取得列表中的最后一个元素

{{[01,80,42,44,77]|count}}

  • 取得列表中的元素的个数count也可以使用length来替代

{{[01,80,42,44,77]|sort}}

  • 对列表中元素进行重新排序,默认是按照升序进行排序

{{[01,80,42,44,77]|join.(',')}}

  • 将列表的元素合并为字符串

3.对数值进行相关操作的过滤器

1{{0.8888|round}}

  • 四舍五入取得整数

{{10.9999|round(2,'floor')}}

  • 保留小数点的后两位

{{-2|abs}}求绝对值运算,返回结果为2

自定义过滤器
通过调用add_template_filter方法实现自定义过滤器,改方法第一个是函数名,第二个是自定义过滤器的名称

flask框架中的Jinja2模板引擎相关推荐

  1. Flask 中的Jinja2模板引擎

    Flask 中的Jinja2模板引擎 在 Web 项目中,前端的显示效果是通过 HTML 语言来实现的,后端的视图函数将数据或模板文件返回给前端. 前端接收到后端返回的结果后,需要通过模板引擎来渲染页 ...

  2. Flask框架之Jinja 2模板引擎

    文章目录 3.6宏的定义及使用 3.6.1 宏的定义 3.6.2 宏的导入 3.6.3 include的使用 3.7 set和with语句的使用 3.8静态资源文件的加载 3.9模板的继承 3.6宏的 ...

  3. php ci框架 模板输出,CI框架中使用通用模板引擎smarty

    CI版本:2.1.4 // 此时的最新版本 Smarty版本:Smarty-2.6.26 // 因为我之前用这个版本,为了照顾自己的使用习惯,这里没有使用最新的Smaty版本,大家理解了扩展原理,可以 ...

  4. 从零开始学 Python 之 Web 开发 Jinja2 模板引擎

    被之前的文章中,简单介绍了 Python Web 开发框架 Flask,知道了如何写个 Hello World,但是距离用 Flask 开发真正的项目,还有段距离,现在我们目标更靠近一些 -- 学习下 ...

  5. 第三章 jinja2模板引擎

    目录 第三章 jinja2模板引擎 3.1模板引擎概述及简单实用 3.2向模板中传递参数 3.3模板中控制语句之if语句 3.3模板中控制语句之for语句 3.5 Flask的过滤器 3.6宏的定义及 ...

  6. Web框架——Flask系列之Jinja2模板引擎(二)

    Jinja2模板引擎简介 一.Jinja2模板概述 用来展示数据的html页面,这个过程也通常称为渲染,属于Jinja2的功能 使用模板的好处: 视图函数只负责业务逻辑和数据处理(业务逻辑方面) 而模 ...

  7. Flask 框架下 Jinja2 模板引擎高层 API 类——Environment

    Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本. Environment 类功能: Environment 是 Jinja2 中的一个核心 ...

  8. Flask学习(二)——Jinja2模板引擎

    Jinja2模板引擎 动态网页,可能有部分内容数据是需要计算出来的,是动态的内容 在函数中传递参数,在HTML页面中,利用{{}}获取传递的参数 app.py from flask import Fl ...

  9. Flask框架 请求与响应 模板语法

    目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...

最新文章

  1. 见了很久没见的高中同学,真好
  2. Java 8 Time Api 使用指南【珍藏限量版】
  3. web项目发布时出现Deployment failure on Tomcat 7.x.
  4. php获取网站根目录
  5. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...
  6. 3m格式的文件怎么转换成mp3_一招就能让PDF与其他格式文件相互转换,这样的大招你值得拥有...
  7. shell比较运算符
  8. 最全JavaScript基础总结~建议收藏
  9. Clubhouse 推出漏洞奖励计划,严重漏洞最高可获3000美元
  10. android之uniapp弹出activity
  11. 我一个普通程序员,光靠GitHub打赏就年入70万,其实你也可以
  12. ubuntu中 tftp 服务器搭建 tftpd-hpa
  13. wifi连接一段时间才能上网_为什么wifi连接上却不能上网?教你如何解决wifi连上却不能上网...
  14. U盘中快捷方式病毒的解决方法
  15. python求组合数c(m、n)编程题_c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的组合数。编写程序...
  16. 计算机二级培训ppt,计算机二级PPT真题:科技政策培训PPT
  17. Arduino 控制RFID读写器读写 IC卡
  18. No module named six
  19. numpy_3数组的操作-变形
  20. nginx服务器的建立

热门文章

  1. javaFx的标签与输入框
  2. eclipse ssh mysql数据库_Eclipse搭建SSH环境实现Struts2分页显示mysql数据库表中内容...
  3. 目标检测YOLO实战应用案例100讲-基于PReNet和YOLOv4融合的 雨天交通目标检测网络
  4. 乌云网掌门人方小顿:BAT三巨头对安全问题讳疾忌医
  5. 多卡聚合智能融合通信设备在消防应急可视化指挥的应用
  6. Captura屏幕录制教程(超详细)
  7. Tile防丢器引入全新防盗模式,苹果Find My功能拓展到大众消费电子
  8. 【智能门禁系统设计】——项目需求分析(web端软件)
  9. python天气预报界面_Python开发,用GUI编写一个天气查询桌软件
  10. java metrics_Metrics—Java版的指标度量工具之一