本文主要介绍了Flask模板的使用,包括jinja2的语法、内置过滤器和自定义过滤器。首先,阐述了模板的概念,即包含占位变量的文件,通过动态赋值后返回给用户。接着,详细介绍了jinja2的三种语法:控制结构、变量取值和注释。然后,列举了Flask内置的过滤器,如绝对值、默认值、格式化字符串等,并提供了示例代码。最后,讲述了如何自定义过滤器,通过使用app.template_filter()
装饰器实现字符串反转的示例,使读者更好地理解自定义过滤器的应用。
模板简单来说就是一个其中包涵占位变量表示动态的部分的文件,模板文件在经过动态赋值后,返回给用户。 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。
在jinja2中,存在三种语法:
在Flask中,render_template中填入参数data,可以将数据传入
from flask import Flask, abort, request, make_response, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
data = {"name": "张三",
"age": 18,
"mylist": [1, 2, 3, 4, 5]
}
return render_template('index2.html',data= data)
if __name__ == "__main__":
app.run()
可以在模板文件中写一个index2.html
,里面内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world!
<br>
{{ data }}
<br>
{{ data['name'] }}<br>
{{ data.name }}<br>
获取MyList:{{ data['mylist']}}<br>
MyList索引为1:{{ data['mylist'][1]}}<br>
MyList索引为1:{{ data.mylist[1]}}<br>
MyList[0]+MyList[1]:{{ data.mylist[0] + data.mylist[1]}}<br>
</body>
</html>
其中,{{ data }}就是直接读取data变量中的全部内容。也可以进行取值。取值有两种方法。
Flask 提供了一些内置的模板过滤器,这些过滤器可以直接在模板中使用。以下是一些常用的内置过滤器:
abs(value)
:返回一个数值的绝对值。例如:-1|abs
。default(value,default_value)
:如果当前变量没有值,则会使用参数中的值来代替。 name|default('hello world')
,如果name
不存在,则会使用hello world
来代替。boolean=False
默认是在只 有这个变量为undefined
的时候才会使用default中的值,即None
,[]
,{}
等都不会使用default
的默认值,当boolean=True
的时候就可以使用默认来代替,或者用name or 'hello world'
来代替name|default('hello world',boolean=True)
默认的boolean
是True
first(value)
:返回一个序列的第一个元素。name|first
format(value,*args,**kwargs)
:格式化字符串。last(value)
:返回一个序列的最后一个元素。示例:names|last。
length(value)
:返回一个序列或者字典的长度。示例:names|length
join(value,d='u')
:将一个序列用d这个参数的值拼接成字符串int(value)
:将值转换为int
类型float(value)
:将值转换为float
类型lower(value)
:将字符串转换为小写upper(value)
:将字符串转换为大写replace(value,old,new)
:替换将old
替换为new
的字符串truncate(value,length=253,killwords=False)
:截取length长度的字符串striptags(value)
:删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格trim
:截取字符串前面和后面的空白字符string(value)
:将变量转换成字符串wordcount(s)
:计算一个长字符串中单词的个数把index2.html
的内容改为下面的示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ "hello"|capitalize }}</h1>
<p>{{ "This is a SAMPLE text."|lower }}</p>
<p>{{ "This is a SAMPLE text."|upper }}</p>
<p>{{ "this is a long text"|truncate(10) }}</p>
</body>
</html>
运行结果:
所谓自定义过滤器,就是使用自己写的一个规则函数。
Flask 还允许定义自己的自定义过滤器,以满足特定需求。要定义自定义过滤器,需要使用 app.template_filter()
装饰器,并将其应用于一个函数。该函数将接受一个或多个参数,并返回处理后的值。
例如在index2.html
的内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>{{ text2222 }}</h2>
<h2>{{ text2222 | reverse }}</h2>
</body>
</html>
flask代码如下:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
return render_template('index2.html',text2222="Hello, World!")
# 自定义过滤器,将字符串反转
@app.template_filter('reverse')
def reverse_filter(s):
return s[::-1]
if __name__ == "__main__":
app.run()
运行效果如下: