Jinja2过滤器的使用、控制语句示例详解
作者:头秃小程 发布时间:2023-01-30 19:02:00
1.过滤器的使用
1.过滤器和测试器
在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现。在模板中,我们则是通过过滤器来实现的。过滤器本质上也是函数,但是在模板中使用的方式是通过管道符号(|)来调用的。例如有个字符串类型变量name,想要获取他的长度,则可以通过 {name[length}}来获取,Jinja2会把name当做第一个参数传给length过滤器底层对应的函数。length是Jinja2内置好的过滤器,Jinja2中内置了许多好用过滤器,如果内置过滤器不满足需求,我们还可以自定义过滤器。我们先来学习下如何自定义过滤器,读者明白了过滤器的原理后,再去学习Jinja2内置过滤器就更能得心应手了。
2.过滤器
templates/filter.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>过滤器使用demo</title>
</head>
<body>
{{ user.username}}-{{ user.username|length }}
</body>
</html>
app.py
# render_template 渲染模板
from flask import Flask, render_template
app = Flask(__name__)
class User:
def __init__(self, username, email):
self.username = username
self.email = email
@app.route("/filter")
def filter_demo():
user = User(username="小程xxx", email="xxx@qq.com")
return render_template("filter.html",user=user)
if __name__ == '__main__':
app.run()
效果
3.自定义过滤器
过滤器本质上是 Python的函数,他会把被过滤的值当做第一个参数传给这个函数,函数经过一些逻辑处理后,再返回新的值。在过滤器函数写好后,可以通过@app.template_ filter装饰器或者是app.add_template_filter函数来把函数注册成Jinja2能用的过滤器。这里我们以注册一个时间格式化的过滤器为例,来说明下自定义过滤器的方法。
app.py
# render_template 渲染模板
from flask import Flask, render_template
from datetime import datetime
app = Flask(__name__)
# strftime:根据区域设置格式化本地时间
# format:格式化
def datetime_format(value,format="%Y年%m月%d日 %H:%m"):
return value.strftime(format)
app.add_template_filter(datetime_format,"dformat")
class User:
def __init__(self, username, email):
self.username = username
self.email = email
# filter:过滤器
@app.route("/filter")
def filter_demo():
user = User(username="小程xxx", email="xxx@qq.com")
mytime=datetime.now()
return render_template("filter.html",user=user,mytime=mytime)
if __name__ == '__main__':
app.run()
上面我们定义了一个datetime_formt的函数,第一个参数是需要被处理的值,第二个参数是时间的格式,并且指定了一个默认值。然后下面通过app.add_template_filter,将datetime_format函数注册成了过滤器,并且这个过滤器的名字,叫做dformat。那么以后在模板文件中,就可以这样类似这样使用了:
templates/filter.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>过滤器使用demo</title>
</head>
<body>
<div>{{ user.username}}-{{ user.username|length }}</div>
<div>{{ mytime|dformat }}</div>
</body>
</html>
效果
2.控制语句
1.if
app.py
# render_template 渲染模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/control")
def control_statement():
age=17
return render_template("control.html",age=age)
if __name__ == '__main__':
app.run()
templates/control.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if age>18 %}
<div>您已经满118岁,可以进入网吧!</div>
{% elif age==18 %}
<div>您刚满18岁,需要父母陪同才能进入!</div>
{% else %}
<div>您未满18岁,不能进入网吧!</div>
{% endif %}
</body>
</html>
注:
可以注意到if语句结束后,需要加一个endif来关闭if代码块。这个跟python是有点不同的。
Jinja2中的代码缩进只是为了更加方便阅读。任何缩进都不是必须的。
2.for
app.py
# render_template 渲染模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/control")
def control_statement():
age = 17
books = [{
"name": "三国演义",
"author": "罗贯中"
},{
"name": "水浒传",
"author": "施耐庵"
}
]
return render_template("control.html", age=age,books=books)
if __name__ == '__main__':
app.run()
templates/control.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for book in books %}
<div>图书名称:{{ book.name }},图书作者:{{ book.author }}</div>
{% endfor %}
</body>
</html>
来源:https://blog.csdn.net/Maruko_428/article/details/129255828


猜你喜欢
- 一、决策树的特点1.优点具有很好的解释性,模型可以生成可以理解的规则。可以发现特征的重要程度。模型的计算复杂度较低。2.缺点模型容易过拟合,
- 前面使用TensorFlow实现一个完整的Softmax Regression,并在MNIST数据及上取得了约92%的正确率。前文传送门:
- 通过Python操作注册表有两种方式,第一种是通过Python的内置模块 _winreg;另一种方式就是Win32 Extension Fo
- 本文实例讲述了Python嵌套函数,作用域与偏函数用法。分享给大家供大家参考,具体如下:内嵌函数(嵌套函数):意思:在函数里面再定义一个新的
- 主要代码如下: total = application("All
- 1.进入官网https://www.python.org/,点击Downloads下的Windows按钮,进入下载页面。2.如下图所示,点击
- MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Win
- 一、弹球游戏代码 下文是tkinter的应用实例,实现弹球游戏,通过<--和-->件移动平板接球。from tkint
- 块级函数严格模式下,在 ES6 之前应禁止使用。ES6 开始可以使用,函数的作用域为声明该函数的块内部。非严格模式下应禁止使用。if(tru
- python的图形用户界面我是大帅哥啊 python的图形用户界面msgbox的使用ccbox的使用buttonbox的使用buttonbo
- 本文实例讲述了Python实现读取文件最后n行的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import
- 1. 问题描述对右图进行修改:请更换图形的风格请将 x 轴的数据改为-10 到 10请自行构造一个 y 值的函数将直方图上的数字,位置改到柱
- 简介Type Hint(或者叫做PEP-484)提供了一种针对Python程序的类型标注标准。为什么使用Type Hint?对于动态语言而言
- python numpy 中linspace函数numpy提供linspace函数(有时也称为np.linspace)是python中创建数
- 查找资料,基本上判断python对象是否为可调用的函数,有三种方法使用内置的callable函数callable(func)用于检查对象是否
- MySQL的命令行提示符及其表达的意思mysql> 准备好接受新命令。 &n
- 1. 引言在Python中我们经常使用pip来安装第三方Python软件包,其实我们每个人都可以免费地将自己写的Python包发布到PyPI
- 在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字, 而CLOB数据类型,则能最多存放8
- 1 概述1.1 贪心算法贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选
- 自从web2.0之后,网页设计开始走向实用设计的阶段,越来越多的设计师注意到“为表达信息而设计”。着迷于前段时间黑白灰老师给大家介绍的“in