Jinja2模版语言,自带有一些filter,可以在前端的模版中控制数据按照相应的方式显示。好比如下两种filter,分别能在前端控制数字的近似精度显示和根据字符串长度补齐:html
round(value, precision=0, method='common') {{ 42.55|round }} -> 43.0 {{ 42.55|round(1, 'floor') }} -> 42.5 truncate(s, length=255, killwords=False, end='...') {{ "foo bar"|truncate(5) }} -> "foo ..." {{ "foo bar"|truncate(5, True) }} -> "foo b..."
可是,有时候自带的filter的灵活性有限,不能知足咱们的要求,这时候便用到了自定义filter。在查找自定义filter相关资料的时候,仍是能找到一些。能够根据这些资料了解到,实际上,filter是相应函数的调用。自定义filter之须要作两项工做:一是写一个filter函数;在当前环境中注册filter。前端
filter函数的第一个参数,是在模版中运用filter的html模版成分。这里咱们实现的是一个要将字符串末尾的数字不显示的功能,为此,要写以下filter函数:python
import re def rm_num_at_end(name): result=re.sub("\s\d+$","",name) return result
而后在环境中注册该filter,代码以下:web
env=app.jinja_env env.filters['rm_end_num'] = rm_num_at_end
这样,便生成了一个新的自定义的filter。而后,咱们就能够像使用Jinja2自带的filter同样使用该filter了。(这里,有的字符串末尾有空格,后面跟一个数字,该filter实现的是不显示字符串末尾的空格和数字。)
ps:你可能会问,filter的定义和注册应该放在哪儿呢?放在哪一个文件中实现呢?其实,很简单,放在项目app目录下的 __init__.py文件中就行。(这里的web框架用的是flask。) flask