目录
1.使用装饰器注册过滤器:@app.template_filter()
2.使用集中注册过滤器: app.add_template_filter()
一。过滤器
内置过滤器
1.字符串
1.1 当变量未定义时,显示默认字符串,可以缩写为d
<p>{{ name | default('No name', true) }}</p>
1.2 单次首字母大写
<p>{{ 'hello' | capitalize }}</p>
1.3 单词全小写
<p>{{ 'CHUNTIAN' | lower }}</p>
1.4 去除字符串前后的空白符
<p>{{ ' hello ' | strim }}</p>
1.5 字符串反转,返回olleh
<p>{{ 'hello' | reverse }}</p>
1.6 格式化输出,返回‘ chuntian is 4 years old '
<p>{{ '%s is %d years old | format('chuntian', 4) }}</p>
2.数字
2.1 四舍五入取整
<p>{{ 3.1514926 | round }}</p> 返回3
2.2 向下截取小数点后2位
<p>{{ 3.1514926 | round(2, 'floor') }}</p> 返回3.15
2.3 取绝对值
<p>{{ -4 | abs }}</p> 返回4
3.列表
3.1 取第一个元素
<p>{{ [1,2,3,4,5] | first }}</p> 返回1
3.2 取最后一个元素
<p>{{ [1,2,3,4,5] | last }}</p> 返回5
3.3 返回列表长度
<p>{{ [1,2,3,4,5] | length }}</p> 返回5
3.4 列表求和
<p>{{ [1,2,3,4,5] | sum }}</p> 返回15
3.5 列表排序,默认为升序
<p>{{ [3,2,1,4,5] | sort }}</p> 返回[1,2,3,4,5]
3.6 合并为字符串,返回“ 1|2|3|4 |5 ”
<p>{{ [1,2,3,4,5] | join(" | ") }}</p> 返回1
3.7 列表所有元素都大写/小写
<p>{{ [“USer”,"name","agE"] | upper }}</p>
4. tojson:将字典转换为json字符
<p>{{ {"name":"chuntian"} | tojson | safe() }}</p>
自定义过滤器
1.使用装饰器注册过滤器:@app.template_filter()
2.使用集中注册过滤器: app.add_template_filter()
后端代码
import time
from datetime import datetime
from flask import Flask, render_template
app = Flask(__name__)
@app.template_filter('format_time') # 模板渲染中格式话时间戳
def format_str_time(timestamp):
return datetime.fromtimestamp(timestamp)
# 不使用装饰器注册,使用集中注册的方式:
# app.add_template_filter(format_str_time,'format_time')
@app.route('/')
def index():
projects = [
{"name": "项目1", "interface_num": 11, "time": int(time.time())},
{"name": "项目2", "interface_num": 22, "time": int(time.time())},
{"name": "项目3", "interface_num": 33, "time": int(time.time())},
{"name": "项目4", "interface_num": 44, "time": int(time.time())},
]
# render_template()中第1个参数后面的参数,会将数据传给第1个参数页面,页面中若存在{{ }},则会匹配后面参数的数据。
return render_template('index.html', pro=projects, title='测试平台')
if __name__ == '__main__':
app.run(debug=True)
前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
{% for project in pro %}
{% set name=project.name %} <!--# 设置变量-->
{% if not loop.last %}
<div>序号:{{ loop.nextitem.name }}--项目名称:{{ name }},接口数量:{{ project["interface_num"] }},创建日期:{{ project["time"] | format_time }}</div>
{% else %}
<div>序号:{{ loop.index }}--项目名称:{{ name }},接口数量:{{ project["interface_num"] }},创建日期:{{ project["time"] }}</div>
{% endif %}
{% endfor %}
</body>
</html>
效果
二。测试
if xxxx is xxxx ,根据判断结果来执行后面的逻辑,如:
{% if loop.index is divisibleby(2) %} 如果循环序号能整除2 ,则xxxx
内置测试器
1.1 检查变量是否被定义,也可用undefined检查是否未被定义
{% if name is defined %}
<p> Name is : {{ name }}</p>
{% endif % }
1.2 检查是否所有字符都是大写
{% if name is upper %}
<p> Name is : {{ name }}</p>
{% endif % }
1.3 检查变量是否为空
{% if name is none %}
<p> Name is : {{ name }}</p>
{% endif % }
1.4 检查变量是否是字符串,也可以用number检查是否是数值
{% if name is string %}
<p> Name is : {{ name }}</p>
{% endif % }
1.5 检查数值是否是偶数,也可以用odd检查是否是奇数
{% if name is even %}
<p> Name is : {{ name }}</p>
{% endif % }
1.6 检查变量是否可以被迭代循环,也可以用sequence检查是否是序列
{% if name is iterable %}
<p> Name is : {{ name }}</p>
{% endif % }
1.7 检查变量是否是字典
{% if name is mapping %}
<p> Name is : {{ name }}</p>
{% endif % }
自定义测试器:@app.template_test()
import json
import time
from flask import Flask, render_template
app = Flask(__name__)
@app.template_test()
def jsoned(test_data):
# 测试器判断是否为json格式数据,测试器条件成立与否都要返回布尔值True/False
try:
json.loads(test_data)
return True
except ValueError:
return False
@app.route('/')
def index():
projects = [
{"name": "项目1", "interface_num": 11, "time": int(time.time())},
{"name": "项目2", "interface_num": 22, "time": int(time.time())},
{"name": "项目3", "interface_num": 33, "time": int(time.time())},
{"name": "项目4", "interface_num": 44, "time": int(time.time())},
]
# render_template()中第1个参数后面的参数,会将数据传给第1个参数页面,页面中若存在{{ }},则会匹配后面参数的数据。
return render_template('index.html', pro=projects, title='测试平台', test_json='{"name":"chuntian"}')
if __name__ == '__main__':
app.run(debug=True)
效果:
三。@context_processor 环境处理器
环境处理器不仅可以传递变量,还可以传递函数。被修饰的函数必须返回一个字典。
函数用@app.context_processor装饰器装饰,它是一个上下文处理器,它的作用是在模版渲染前运行其所修饰的函数,并将函数返回的字典导入到模版上下文环境中,与模版上下文合并。
效果