国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django 自定義過濾器的實現

2020-02-16 01:21:04
字體:
來源:轉載
供稿:網友

自定義模版過濾器

雖然DTL給我們內置了許多好用的過濾器。但是有些時候還是不能滿足我們的需求。因此Django給我們提供了一個接口,可以讓我們自定義過濾器,實現自己的需求。

模版過濾器必須要放在app中,并且這個app必須要在INSTALLED_APPS中進行安裝。然后再在這個app下面創建一個Python包叫做templatetags。再在這個包下面創建一個python文件。比如app的名字叫做book,那么項目結構如下:

- book  - views.py  - urls.py  - models.py  - templatetags    - my_filter.py

在創建了存儲過濾器的文件后,接下來就是在這個文件中寫過濾器了。過濾器實際上就是python中的一個函數,只不過是把這個函數注冊到模板庫中,以后在模板中就可以使用這個函數了。但是這個函數的參數有限制,第一個參數必須是這個過濾器需要處理的值,第二個參數可有可無,如果有,那么就意味著在模板中可以傳遞參數。并且過濾器的函數最多只能有兩個參數。在寫完過濾器后,再使用django.template.Library對象注冊進去。示例代碼如下:

from django import template# 創建模板庫對象register = template.Library()# 過濾器函數def mycut(value,mystr):  return value.replace(mystr)# 將函數注冊到模板庫中register.filter("mycut",mycut)

以后想要在模板中使用這個過濾器,就要在模板中load一下這個過濾器所在的模塊的名字(也就是這個python文件的名字)。示例代碼如下:

{% load my_filter %}

自定義時間計算過濾器:

有時候經常會在朋友圈、微博中可以看到一條信息發表的時間,并不是具體的時間,而是距離現在多久。比如剛剛,1分鐘前等。這個功能DTL是沒有內置這樣的過濾器的,因此我們可以自定義一個這樣的過濾器。示例代碼如下:

# time_filter.py文件from datetime import datetimefrom django import templateregister = template.Library()def time_since(value):  """  time距離現在的時間間隔  1/. 如果時間間隔小于1分鐘以內,那么就顯示“剛剛”  2/. 如果是大于1分鐘小于1小時,那么就顯示“xx分鐘前”  3/. 如果是大于1小時小于24小時,那么就顯示“xx小時前”  4/. 如果是大于24小時小于30天以內,那么就顯示“xx天前”  5/. 否則就是顯示具體的時間 2017/10/20 16:15  """  if isinstance(value,datetime):    now = datetime.now()    timestamp = (now - value).total_seconds()    if timestamp < 60:      return "剛剛"    elif timestamp >= 60 and timestamp < 60*60:      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")  else:    return valueregister.filter("time_since",time_since)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德江县| 井研县| 汝城县| 恩平市| 通州市| 龙口市| 沁阳市| 赤峰市| 磐石市| 四子王旗| 当涂县| 康马县| 呼伦贝尔市| 温泉县| 荆州市| 鹿邑县| 菏泽市| 富民县| 韩城市| 宜丰县| 石台县| 林甸县| 田东县| 东乌珠穆沁旗| 苍南县| 河南省| 吴江市| 新绛县| 巫山县| 军事| 沂南县| 慈溪市| 汉沽区| 仪陇县| 阿拉善左旗| 永安市| 湾仔区| 河曲县| 塔河县| 新郑市| 出国|