Python自定義計算時間過濾器實現過程解析
阿新 • • 發佈:2020-01-19
這篇文章主要介紹了Python自定義計算時間過濾器實現過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在寫自定義的過濾器時,因為django.template.Library.filter()本身可以作為一個裝飾器,所以可以使用:
register = django.template.Library() @register.filter 代替 register.filter("過濾器名","函式名")
如果使用@register.filter進行註冊自定義的過濾器,並且沒有傳遞任何引數,那麼預設的過濾器名和函式名是相同的,當然,也可以進行修改,只需要在@register.filter("過濾器名"),此時的過濾器名就更改了,就可在DTL模板中使用自定義的過濾器了。
定義時間計算過濾器在顯示的時候,時間的顯示規則:time距離現在多長時間間隔
- 如果時間間隔小於1分鐘,那麼就像是“剛剛”
- 如果時間間隔大於1分鐘小於1小時,那麼就顯示“xx分鐘前”
- 如果是大於1小時小於24小時,那麼就顯示“xx小時前”
- 如果是大於24小時,小於30天,那麼就顯示“xx天前”'
- 否則就是顯示具體時間
示例程式碼如下:
自定義過濾器的檔案my_fliter.py
@register.filter() def time_since(value): # 首先對傳進來的時間進行判斷,如果是datetime型別的就可以與當前的時間進行比較, # 如果不是datetime型別的,就直接返回value if not isinstance(value,datetime): return value # 如果可以到達這裡,就代表為datetime型別的, # timedelay.total_seconds()屬性 now = datetime.now() timestamp = (now - value).total_seconds() if timestamp < 60: return "剛剛" elif timestamp >= 60 and timestamp < 60*60: # 在python3中如果兩數相除,有餘數的話,就會保持小數,這個時候我們就可以使用int()函式,進行轉換 minutes = int(timestamp/60) return "%s分鐘前" % minutes elif timestamp >= 60*60 and timestamp < 60*60*24: hours = int(timestamp/60/60) return "%s小時前" % hours elif timestamp >= 60*60*24 and timestamp < 60*60*24*30: days = int(timestamp/60/60/24) return "%s天前" % days else: return value.strftime("%Y/%m/%d %H:%M")
views.py中定義檢視函式,並且構造一個時間:
from django.shortcuts import render from datetime import datetime def index(request): context = { 'time': datetime(year=2019,month=1,day=16,hour=23,minute=44,second=0) } return render(request,'index.html',context=context)
index.html中進行呼叫:
{# 如果想要使用自定義的過濾器的話,就必須要先匯入,匯入的名稱為自定義過濾器所處的檔名 #} {# 必須要把app安裝到settings.py檔案中 #} {% load my_fliter %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ time|time_since }} </body> </html>
瀏覽器中檢視結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。