一、django
中自帶的過濾器參考
二、django
中自定義過濾器
-
1、在
app
下建立一個包templatetags
(名字必須是這個) -
2、這個
app
必須在settings.py
中註冊 -
3、在
templatetags
中建立一個xx.py
檔案 -
4、下面定義了2個過濾器
from django import template import datetime register = template.Library() @register.filter def chinese_date_format(value): """ 一個將時間轉換為中國時間的過濾器 :param value: :return: """ if isinstance(value, datetime.datetime): return "{}年{}月{}日".format(value.year, value.month, value.day) else: return value @register.filter def add_description(value, tag): """ 一個給標籤新增tag的過濾器 :param value: :param tag: :return: """ return f'{value}({tag})' 複製程式碼
-
5、在需要使用自定義的過濾器的模板中(在
django
中指的是html
頁面){% load [你自定義的過濾器的py檔名] %} 複製程式碼
-
6、使用
... <td>{{ book.name | add_description:"一本書" }}</td> <td>{{ book.date | chinese_date_format }}</td> ... 複製程式碼
三、附加一個常用的過濾器
定義一個多少時間之前的過濾器,使用方式和上面一樣的
@register.filter('time_ago')
def time_ago(value):
"""
定義一個距離當前時間多久之前的過濾器
:param value:
:return:
1.如果時間間隔小於1分鐘內,那麼就顯示剛剛
2.如果時間間隔大於1分鐘小於1小時,那麼就顯示xx分鐘前
3.如果時間間隔大於1小時小於24小時,那麼就顯示xx小時前
4.如果時間間隔大於24小時小於30天,那麼就顯示xx天前
5.如果時間間隔大於30天,那麼就顯示具體時間
"""
if not isinstance(value, datetime.datetime):
return value
now = datetime.datetime.now()
timestamp = (now - value).total_seconds()
if timestamp < 60:
return '剛剛'
elif timestamp >= 60 and timestamp < 60 * 60:
return '{}分鐘前'.format(int(timestamp / 60))
elif timestamp >= 60 * 60 and timestamp < 60 * 60 * 24:
return '{}小時前'.format(timestamp / 60 / 60)
elif timestamp >= 60 * 60 * 24 and timestamp < 60 * 60 * 23 * 30:
return '{}天前'.format(int(timestamp / 60 / 60 / 24))
else:
return value.strftime('%Y-%m-%d %H:%M')
複製程式碼