91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django 自定義過濾器的實現

發布時間:2020-09-11 04:48:41 來源:腳本之家 閱讀:181 作者:小短腿電工 欄目:開發技術

自定義模版過濾器

雖然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 datetime
from django import template

register = 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 value

register.filter("time_since",time_since)

在模版中使用的示例代碼如下:

{% load time_filter %}
...
{% value|time_since %}
...

為了更加方便的將函數注冊到模版庫中當作過濾器。也可以使用裝飾器來將一個函數包裝成過濾器。示例代碼如下:

from django import template
register = template.Library()

@register.filter(name='mycut')
def mycut(value,mystr):
  return value.replace(mystr,"")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东| 图木舒克市| 临泉县| 延安市| 长垣县| 建昌县| 皋兰县| 霍城县| 邹城市| 黄浦区| 新和县| 丰台区| 无棣县| 许昌市| 罗江县| 仲巴县| 和政县| 洞头县| 黄梅县| 来凤县| 招远市| 鹤岗市| 乐东| 类乌齐县| 屯门区| 蓬安县| 寻乌县| 高阳县| 寻甸| 平舆县| 林西县| 石河子市| 防城港市| 扶余县| 北川| 商城县| 威信县| 宁城县| 潮安县| 遵义县| 嘉峪关市|