Jinja2模版語言自定義filter的使用

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

相關文章
相關標籤/搜索