- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Python自定義計算時(shí)間過(guò)濾器實(shí)現過(guò)程的示例分析
這篇文章主要介紹Python自定義計算時(shí)間過(guò)濾器實(shí)現過(guò)程的示例分析,文中介紹的非常詳細,具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在寫(xiě)自定義的過(guò)濾器時(shí),因為django.template.Library.filter()本身可以作為一個(gè)裝飾器,所以可以使用:
register = django.template.Library()@register.filter 代替 register.filter("過(guò)濾器名","函數名")
如果使用@register.filter進(jìn)行注冊自定義的過(guò)濾器,并且沒(méi)有傳遞任何參數,那么默認的過(guò)濾器名和函數名是相同的,當然,也可以進(jìn)行修改,只需要在@register.filter("過(guò)濾器名"),此時(shí)的過(guò)濾器名就更改了,就可在DTL模板中使用自定義的過(guò)濾器了。
定義時(shí)間計算過(guò)濾器在顯示的時(shí)候,時(shí)間的顯示規則:time距離現在多長(cháng)時(shí)間間隔
如果時(shí)間間隔小于1分鐘,那么就像是“剛剛”如果時(shí)間間隔大于1分鐘小于1小時(shí),那么就顯示“xx分鐘前”如果是大于1小時(shí)小于24小時(shí),那么就顯示“xx小時(shí)前”如果是大于24小時(shí),小于30天,那么就顯示“xx天前”'否則就是顯示具體時(shí)間
示例代碼如下:
自定義過(guò)濾器的文件my_fliter.py
@register.filter()def time_since(value): # 首先對傳進(jìn)來(lái)的時(shí)間進(jìn)行判斷,如果是datetime類(lèi)型的就可以與當前的時(shí)間進(jìn)行比較, # 如果不是datetime類(lèi)型的,就直接返回value if not isinstance(value,datetime): return value # 如果可以到達這里,就代表為datetime類(lèi)型的, # timedelay.total_seconds()屬性 now = datetime.now() timestamp = (now - value).total_seconds() if timestamp < 60: return "剛剛" elif timestamp >= 60 and timestamp < 60*60: # 在python3中如果兩數相除,有余數的話(huà),就會(huì )保持小數,這個(gè)時(shí)候我們就可以使用int()函數,進(jìn)行轉換 minutes = int(timestamp/60) return "%s分鐘前" % minutes elif timestamp >= 60*60 and timestamp < 60*60*24: hours = int(timestamp/60/60) return "%s小時(shí)前" % 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中定義視圖函數,并且構造一個(gè)時(shí)間:
from django.shortcuts import renderfrom datetime import datetimedef 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中進(jìn)行調用:
{# 如果想要使用自定義的過(guò)濾器的話(huà),就必須要先導入 ,導入的名稱(chēng)為自定義過(guò)濾器所處的文件名 #}{# 必須要把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>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站