Python自定義計(jì)算時(shí)間過(guò)濾器實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python自定義計(jì)算時(shí)間過(guò)濾器實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在寫(xiě)自定義的過(guò)濾器時(shí),因?yàn)閐jango.template.Library.filter()本身可以作為一個(gè)裝飾器,所以可以使用:
register = django.template.Library() @register.filter 代替 register.filter("過(guò)濾器名","函數(shù)名")
如果使用@register.filter進(jìn)行注冊(cè)自定義的過(guò)濾器,并且沒(méi)有傳遞任何參數(shù),那么默認(rèn)的過(guò)濾器名和函數(shù)名是相同的,當(dāng)然,也可以進(jìn)行修改,只需要在@register.filter("過(guò)濾器名"),此時(shí)的過(guò)濾器名就更改了,就可在DTL模板中使用自定義的過(guò)濾器了。
定義時(shí)間計(jì)算過(guò)濾器在顯示的時(shí)候,時(shí)間的顯示規(guī)則:time距離現(xiàn)在多長(zhǎ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): # 首先對(duì)傳進(jìn)來(lái)的時(shí)間進(jìn)行判斷,如果是datetime類(lèi)型的就可以與當(dāng)前的時(shí)間進(jìn)行比較, # 如果不是datetime類(lèi)型的,就直接返回value if not isinstance(value,datetime): return value # 如果可以到達(dá)這里,就代表為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中如果兩數(shù)相除,有余數(shù)的話(huà),就會(huì)保持小數(shù),這個(gè)時(shí)候我們就可以使用int()函數(shù),進(jìn)行轉(zhuǎ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中定義視圖函數(shù),并且構(gòu)造一個(gè)時(shí)間:
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中進(jìn)行調(diào)用:
{# 如果想要使用自定義的過(guò)濾器的話(huà),就必須要先導(dǎo)入 ,導(dǎo)入的名稱(chēng)為自定義過(guò)濾器所處的文件名 #} {# 必須要把a(bǔ)pp安裝到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>
瀏覽器中查看結(jié)果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解決python 文本過(guò)濾和清理問(wèn)題
- 淺談Python 敏感詞過(guò)濾的實(shí)現(xiàn)
- 一行Python代碼過(guò)濾標(biāo)點(diǎn)符號(hào)等特殊字符
- 使用Filter過(guò)濾python中的日志輸出的實(shí)現(xiàn)方法
- Python使用正則表達(dá)式去除(過(guò)濾)HTML標(biāo)簽提取文字功能
- Python學(xué)習(xí)筆記之pandas索引列、過(guò)濾、分組、求和功能示例
- Python中字符串String的基本內(nèi)置函數(shù)與過(guò)濾字符模塊函數(shù)的基本用法
- 對(duì)python字典過(guò)濾條件的實(shí)例詳解
相關(guān)文章
Java 數(shù)據(jù)庫(kù)連接池 DBCP 的介紹
這篇文章主要給大家分享的是 Java 數(shù)據(jù)庫(kù)連接池 DBCP 的介紹, 是 Apache 旗下 Commons 項(xiàng)目下的一個(gè)子項(xiàng)目,提供連接池功能DBCP,下面來(lái)看看文章的具體介紹內(nèi)容吧,需要的朋友可以參考一下2021-11-11詳解Java線(xiàn)程池是如何重復(fù)利用空閑線(xiàn)程的
在Java開(kāi)發(fā)中,經(jīng)常需要?jiǎng)?chuàng)建線(xiàn)程去執(zhí)行一些任務(wù),實(shí)現(xiàn)起來(lái)也非常方便,此時(shí),我們很自然會(huì)想到使用線(xiàn)程池來(lái)解決這個(gè)問(wèn)題,文中給大家提到使用線(xiàn)程池的好處,對(duì)Java線(xiàn)程池空閑線(xiàn)程知識(shí)感興趣的朋友一起看看吧2021-06-06IDEA啟動(dòng)服務(wù)提示端口被占用,Web?server?failed?to?start.Port?was?al
這篇文章主要介紹了IDEA啟動(dòng)服務(wù)提示端口被占用,Web?server?failed?to?start.Port?was?already?in?use.,本文給大家分享解決方案,分為linux系統(tǒng)和windows系統(tǒng)解決方案,需要的朋友可以參考下2023-07-07Java實(shí)現(xiàn)的Windows資源管理器實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07基于SpringBoot+Redis實(shí)現(xiàn)一個(gè)簡(jiǎn)單的限流器
在Spring?Boot中使用Redis和過(guò)濾器實(shí)現(xiàn)請(qǐng)求限流,過(guò)濾器將在每個(gè)請(qǐng)求到達(dá)時(shí)檢查請(qǐng)求頻率,并根據(jù)設(shè)定的閾值進(jìn)行限制,這樣可以保護(hù)您的應(yīng)用程序免受惡意請(qǐng)求或高并發(fā)請(qǐng)求的影響,本文我們通過(guò)Spring?Boot?+Redis?實(shí)現(xiàn)一個(gè)輕量級(jí)的消息隊(duì)列,需要的朋友可以參考下2023-08-08關(guān)于weblogic部署Java項(xiàng)目的包沖突問(wèn)題的解決
這篇文章主要介紹了關(guān)于weblogic部署Java項(xiàng)目的包沖突問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系詳解
這篇文章主要介紹了Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系,結(jié)合實(shí)例形式歸納整理了java整型數(shù)和網(wǎng)絡(luò)字節(jié)序的byte[]之間轉(zhuǎn)換的各種情況,需要的朋友可以參考下2017-08-08