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