切换主题
二、过滤器和测试器
在模板中,过滤器实现对某个变量进行处理,通过管道符号(
|
)调用
例如:
js
{{name|length}} //返回name的长度
一、自定义过滤器
过滤器本质是python的函数,它会把被过滤的值当作第一个参数传给这个函数,经过一些逻辑处理后,在返回新的值。
过滤器函数写好后可以通过
@app.template_filter
装饰器或者app.add_template_filter
函数把函数注册为JinJa2
能用的过滤器
1、使用app.add_template_filter
注册过滤器
app.add_template_filter(被注册的函数,"注册的过滤器名字")
python
def datetime_format(value,format="%Y-%d-%m %H:%M"):
return value.strftime(format)
app.add_template_filter(datetime_format,"dformat")
python
{{article.date | dformat}}
{{article.date | dformat(%B %Y)}}
2、使用@app.template_filter
注册过滤器
@app.template_filter("过滤器名字")
python
@app.template_filter("dformat")
def datetime_format(value,format="%Y-%d-%m %H:%M"):
return value.strftime(format)
二、Jinja2内置过滤器
abs(value)
:获取value
的绝对值。default(value,default_1value,boolean=False)
:如果value
没有定义,则返回第2个参数default_value
- 当
boolean
参数为False
时,如果value
被判断为False
,则返回default_value
- 当
boolean
参数为True
时,无论value
是什么,都会返回default value
- 当
escape(value)
:将一些特殊字符,如&、<、>、“、‘进行转义。因为 Jimja2 默认开启了全局转义,所以在大部分情况下无须手动使用这个过滤器去转义,只有在关闭了转义的情况下,会需要使用到它filesizeformat(value,binary=False)
: 过滤器将字节大小转换为易读的格式binary=False
:以 1000 为基础进行计算,1 KB = 1000 bytes,1 MB = 1000 KB,1 GB = 1000 MBbinary=True
:以 1024 为基础进行计算,1 KiB = 1024 bytes,1 MiB = 1024 KiB,1 GiB = 1024 MiB
frist(value)
:返回 value 序列的第1个元素float(value,default=0.0)
:将value 转换为浮点类型,如果转换失败会返回0.0format(value,*args,**kwargs)
:格式化字符串python<!-- 假设 message 是一个需要格式化的字符串 --> {% set message = "Hello, {}!" %} <!-- 使用 format 过滤器格式化字符串 --> <p>{{ message | format("World") }}</p>
groupby(value,attribute,default-None)
:value 是一个序列,可以使用参数 attribute进行分组例如,有一个uses 列表,里面的user 都有一个 city 属性,如果要按照 city进行分组
python<u1> {% for group in users|groupby("city") %} <li>{{ group.grouper }}:{{ group.list|join(", ")}}</li> {% endfor %} </ul>
group.grouper
:在每个分组中,grouper
属性表示当前分组的标签,即按照哪个属性进行了分组。在这里,它代表了城市的名称group.list
:这是当前分组中所有元素的列表
int(value,default-0,base=10)
:转换为整型,如果转换失败会返回0
,并且默认按照十进制转换join(value,attribute)
:使用attribute
指定的元素,将一个序列拼接成一个字符串last(value)
:返回 value 序列的最后一个元素length(value)
:返回 value 序列的长度list(value)
:换 value 为一个列表1ower(value)
:将value 全部转换为小写如要将 titles 序列中每个元素的值都变成小写形式,那么可以使用以下代码实现
python{{ titles|map("lower")}}
map(value,*args,**kwargs)
:将 value 这个序列都执行某个操作如获取 users这个序列中每个user 的
username
字段python{{ users|map(attribute='username')}}
max(value)
:求序列中的最大值min(value)
:求序列中的最小值random(value)
:返回 value 这个序列中的一个随机值reject(value,*args,**kwargs)
:过滤 value 这个序列中的一些元素,过滤的条件通过后面的参数给定。如要过滤列表中所有的奇数,可以把Jinja2中内置的odd
过滤器传给reject 过滤器来实现,python{{ numbers|reject('odd')}}
rejectattr(value,*args,**kwargs)
:根据 value 序列中元素的某个属性
进行过滤,只要这个属性满足条件,那么就会被过滤掉python{{users|rejectattr("is_active")}} {{users|rejectattr("email","none")}}
第1行代码是过滤users 中is_active为True 的对象,第2行代码是过滤 users 中email为none 的对象
replace(value,old,new,count)
:将字符串value 中的old 替换为new,并且可以通过 count 来确定替换多少个reverse(value)
:将value 这个列逆序safe(value)
:在渲染 value 时,关闭自动转义select(value,*args,**kwargs)
:选择 value 序列中满足条件的元素,与reject 正好相反selectattr(value,*args,**kwargs)
:根据 value 列中元素的某个属性进行过滤,留下满足条件的,过滤掉不满足条件的,与``rejectattr` 正好相反sort(value,reverse=False,case_sensitive=False,attribute=None)
:将value 这个序列进行排序reverse
代表是否逆向排序case_sensitive
代表是否忽略大小写attribute
代表根据value 列中元素的某个属性排序
string(value)
:将value 转换为字符串类型striptags(value)
:将字符串 value 中的 HTMI, 标签去除,留下文本内容tojson(value)
:将value 转换为JSON 格式的字符串trim(value)
:删除value 前面和后面的空白字符(空格)truncate(value,length=255,killwords=False,end="..")
value
:要截取的字符串length
:要保留的字符长度,默认为255killwords
:布尔值,表示在截取字符串时是否要裁剪单词,默认为False。如果设置为True,则截取的字符串可能会在单词中断,而不是在单词之间断开end
:末尾的结束字符,默认为"..”如果
killwords
参数为false
,并且在截取到指定长度时单词尚未截完,则截取器将继续向后截取,直到当前单词结束。因此,即使在长度为200时截取到单词尚未结束,截取器也会继续截取该单词,直到完整的单词结束或达到字符串的末尾
unique(value,case sensitive=False,attribute=None)
:将value 序列中的重复元素删除case_sensitive
代表是否忽略大小写attribute
代表使用 value 序列中元素的某个属性
upper(value)
:将value 所有字符全部转换为大写urlencode(value)
:如果 value 是字符串,那么底层会调用 Python 的urllib.parse.quote
;如果 value 是字典,那么底层会调用Python的urlen.parse.urlencode
urlize(value,trim_url_limit=None,nofollow=False,target=None,rel=None,extra_schemes=None)
:将 value 变成可以单击的链接,如URL 和邮箱。注意:value 必须是以http://
、https://
、www.
、mailto
开头的字符串wordcount(value)
:统计value 中共有多少个单词xmlattr(value,autospace=True)
:value 为一个字典,根据这个字典创建一个xml格式
的属性python<ul {{ {'class':'my list', 'missing': none, 'id':'list-&d'|format(variable) } | xmlattr }} > </ul>
三、测试器
测试器 | 描述 |
---|---|
boolean | 是否为布尔类型 |
callable | 是否能被调用 |
defined | 是否定义 |
divisibleby | 是否能被某个数整除 |
eq | 是否和另外一个值相等 |
еscaped | 是否已经被转义 |
even | 是否为偶数 |
false | 是否为False |
filter | 是否为过滤器 |
float | 是否为浮点类型 |
ge | 是否大于或等于某个数 |
gt | 是否大于某个数 |
in | 是否在某个序列中,与 Python 中的in语法类似 |
integer | 是否为整型 |
iterable | 是否为可迭代类型 |
le | 是否小于或等于某个数 |
lower | 是否全部为小写 |
lt | 是否小于某个数 |
mapping | 是否为一个 mapping 对象(如字典) |
ne | 是否不等于某个数 |
none | 是否为 None |
number | 是否为数值类型 |
odd | 是否为奇数 |
sameas | 是否在内存中和另外一个对象是一样的 |
sequence | 是否为序列(如列表、元组) |
string | 是否为字符串 |
test | 是否为一个测试器 |
true | 是否为 True |
undefined | 是否没有定义 |
upper | 是否全部为大写 |