Python自定義計(jì)算時間過濾器實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python自定義計(jì)算時間過濾器實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在寫自定義的過濾器時,因?yàn)閐jango.template.Library.filter()本身可以作為一個裝飾器,所以可以使用:
register = django.template.Library()
@register.filter 代替 register.filter("過濾器名","函數(shù)名")
如果使用@register.filter進(jìn)行注冊自定義的過濾器,并且沒有傳遞任何參數(shù),那么默認(rèn)的過濾器名和函數(shù)名是相同的,當(dāng)然,也可以進(jìn)行修改,只需要在@register.filter("過濾器名"),此時的過濾器名就更改了,就可在DTL模板中使用自定義的過濾器了。
定義時間計(jì)算過濾器在顯示的時候,時間的顯示規(guī)則:time距離現(xiàn)在多長時間間隔
- 如果時間間隔小于1分鐘,那么就像是“剛剛”
- 如果時間間隔大于1分鐘小于1小時,那么就顯示“xx分鐘前”
- 如果是大于1小時小于24小時,那么就顯示“xx小時前”
- 如果是大于24小時,小于30天,那么就顯示“xx天前”'
- 否則就是顯示具體時間
示例代碼如下:
自定義過濾器的文件my_fliter.py
@register.filter()
def time_since(value):
# 首先對傳進(jìn)來的時間進(jìn)行判斷,如果是datetime類型的就可以與當(dāng)前的時間進(jìn)行比較,
# 如果不是datetime類型的,就直接返回value
if not isinstance(value,datetime):
return value
# 如果可以到達(dá)這里,就代表為datetime類型的,
# 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ù)的話,就會保持小數(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小時前" % 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)造一個時間:
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)用:
{# 如果想要使用自定義的過濾器的話,就必須要先導(dǎo)入 ,導(dǎo)入的名稱為自定義過濾器所處的文件名 #}
{# 必須要把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é)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot集成websocket的四種方式小結(jié)
本文主要介紹了springboot集成websocket的四種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Java8中的LocalDateTime和Date一些時間操作方法
這篇文章主要介紹了Java8中的LocalDateTime和Date一些時間操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
ElasticSearch6.2.3+head插件安裝的方法步驟
這篇文章主要介紹了ElasticSearch6.2.3+head插件安裝的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)支付功能附源碼
這篇文章主要介紹了SpringBoot從0到1整合銀聯(lián)無跳轉(zhuǎn)功能支付附源碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java使用fill()數(shù)組填充的實(shí)現(xiàn)
這篇文章主要介紹了Java使用fill()數(shù)組填充的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Java 從網(wǎng)上下載文件的幾種方式實(shí)例代碼詳解
本文通過實(shí)例代碼給大家介紹了java從網(wǎng)上下載文件的幾種方式,非常不錯,具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08

