Flask模板过滤器详解:内置用法与自定义实现
本文详细介绍Flask模板中过滤器的使用方法。涵盖内置过滤器对字符串和列表的操作,如safe、capitalize、first等。重点讲解两种自定义过滤器的方式:通过add_template_filter方法和装饰器实现,并提示重名覆盖风险。适合需要灵活处理模板数据的Flask开发者参考。
过滤器
过滤器的本质是一个函数。在模板渲染中,有时不仅需要输出变量的原始值,还需要对其进行修改、格式化或运算。由于模板语法不能直接调用Python的所有方法,此时就需要借助过滤器来实现这些功能。
使用方式:
过滤器的标准调用格式为:变量名后接竖线符号,再跟上过滤器名称。
{{variable | filter_name(*args)}}
如果过滤器不需要接收额外参数,可以省略括号。此外,Flask中的过滤器支持链式调用,即多个过滤器可以连续使用。
{{variable | filter_name}}
常见内建过滤器
字符串操作
- safe:禁用HTML转义。示例:<p>{{ '<em>hello</em>' | safe }}</p>
- capitalize:将变量值的首字母转换为大写,其余字母转换为小写。示例:<p>{{ 'hello' | capitalize }}</p>
- lower:将值全部转换为小写。示例:<p>{{ 'HELLO' | lower }}</p>
- upper:将值全部转换为大写。示例:<p>{{ 'hello' | upper }}</p>
- title:将值中每个单词的首字母转换为大写。示例:<p>{{ 'hello' | title }}</p>
- reverse:实现字符串反转。示例:<p>{{ 'olleh' | reverse }}</p>
- format:用于格式化输出。示例:<p>{{ '%s is %d' | format('name',17) }}</p>
- striptags:在渲染前移除值中所有的HTML标签。示例:<p>{{ '<em>hello</em>' | striptags }}</p>
- truncate:对字符串进行截断处理。示例:<p>{{ 'hello every one' | truncate(9)}}</p>
列表操作
- first:获取列表中的第一个元素。示例:<p>{{ [1,2,3,4,5,6] | first }}</p>
- last:获取列表中的最后一个元素。示例:<p>{{ [1,2,3,4,5,6] | last }}</p>
- length:获取列表的长度。示例:<p>{{ [1,2,3,4,5,6] | length }}</p>
- sum:对列表中的元素进行求和。示例:<p>{{ [1,2,3,4,5,6] | sum }}</p>
- sort:对列表进行排序。示例:<p>{{ [6,2,3,1,5,4] | sort }}</p>
自定义过滤器
过滤器的本质是函数。当内置过滤器无法满足特定需求时,可以自定义过滤器。自定义过滤器主要有两种实现方式:
- 一种是通过Flask应用对象的add_template_filter方法注册。
- 另一种是通过装饰器来实现自定义过滤器。
重要提示:如果自定义过滤器的名称与内置过滤器重名,自定义过滤器将覆盖内置过滤器。
需求:添加一个用于反转列表的过滤器。
方式一
通过调用应用程序实例的add_template_filter方法实现自定义过滤器。该方法第一个参数是函数名,第二个参数是自定义的过滤器名称:
def do_listreverse(li): # 通过原列表创建一个新列表 temp_li = list(li) # 将新列表进行返转 temp_li.reverse() return temp_li app.add_template_filter(do_listreverse,'lireverse')
方式二
使用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。
@app.template_filter('lireverse')
def do_listreverse(li):
# 通过原列表创建一个新列表
temp_li = list(li)
# 将新列表进行返转
temp_li.reverse()
return temp_li
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













