在這邊只需要記住一點“過濾器本身是一個函數”.
接著要新增一個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 %}
...
沒有留言:
張貼留言