1. 程式人生 > >flask的jinja2自定義過濾器

flask的jinja2自定義過濾器

自定義過濾器

過濾器的本質是函式。當模板內建的過濾器不能滿足需求,可以自定義過濾器。自定義過濾器有兩種實現方式:

  • 一種是通過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
  • 在 html 中使用該自定義過濾器
<br/> my_array 原內容:{{ my_array }}
<br/> my_array 反轉:{{ my_array | lireverse }}
  • 執行結果
my_array 原內容:[3, 4, 2, 1, 7, 9] 
my_array 反轉:[9, 7, 1, 2, 4, 3]