2016年6月23日 星期四

Django筆記:自定義過濾器

在這邊只需要記住一點“過濾器本身是一個函數”.

接著要新增一個filter來判斷食物辣或是不辣.

<tr>
    <td> {{ food.name }} </td>
    <td> {{ food.price }} </td>
    <td> {{ food.is_spicy|yes_no:"辣/不辣" }} </td>
    <td> {{ food.comment }} </td>
</tr>

1. 寫一個Filter函式

首先打開myfilters.py

def yes_no(bool_value, show_str):
    if bool_value:
        return show_str.partition('/')[0]
    else:
        return show_str.partition('/')[2]

這邊的函式名稱不需要跟我們定義的過濾器名稱一樣. 但是一樣的話通常會比較好管理.
bool_value是過濾器的第一個參數,他負責接收模板中pipe符號(|)左邊的值;而show_str是第二個參數,會用來接收過濾器中的額外參數, 在這邊指的是”辣/不辣”

2. 註冊該函式

from django import template
...
register = template.Library()
register.filter('yes_no', yes_no)

在這邊我們使用register的filter函式來幫我們註冊, filter函式第一個變數是”過濾器名稱“, 第二個參數是他對應的過濾器函式

3. 載入過濾器

最後就是在模板中載入他

{% load myfilters %}
...

沒有留言:

張貼留言