国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - django 自定義過濾器的實現

django 自定義過濾器的實現

2021-06-02 00:12小短腿電工 Python

這篇文章主要介紹了django 自定義過濾器的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

自定義模版過濾器

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

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

?
1
2
3
4
5
6
- book
  - views.py
  - urls.py
  - models.py
  - templatetags
    - my_filter.py

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

?
1
2
3
4
5
6
7
8
9
10
from django import template
 
# 創建模板庫對象
register = template.Library()
 
# 過濾器函數
def mycut(value,mystr):
  return value.replace(mystr)
# 將函數注冊到模板庫中
register.filter("mycut",mycut)

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

?
1
{% load my_filter %}

自定義時間計算過濾器:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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)

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

?
1
2
3
4
{% load time_filter %}
...
{% value|time_since %}
...

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

?
1
2
3
4
5
6
from django import template
register = template.Library()
 
@register.filter(name='mycut')
def mycut(value,mystr):
  return value.replace(mystr,"")

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

原文鏈接:https://www.jianshu.com/p/4ceeee528430

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久这里只有精品免费 | 狠狠操狠狠干 | 午夜网址| 亚洲福利片| 亚洲精品免费在线 | 欧美1区2区 | 日韩激情免费视频 | 在线免费国产 | 亚洲福利社区 | 国产精品久久久久一区二区三区 | 久久九九免费 | 亚洲欧美日韩精品 | 国产精品久久久久久 | 精品国产乱码久久久久久牛牛 | 日韩电影在线免费观看 | 国产精品久久精品 | 69久久| 日韩福利在线 | 国产精品视频久久 | 黄网av| 日韩精品观看 | 国产精品区二区三区日本 | 免费在线成人网 | 成年人免费在线观看视频网站 | 亚洲天堂中文 | 日韩一区二区三区在线观看 | 亚洲人成网亚洲欧洲无码 | 国产99久久精品 | 国产精品久久久久久吹潮 | 国产麻豆乱码精品一区二区三区 | 亚洲欧美在线观看 | 久在线视频 | 视频一区 中文字幕 | 人人干天天干 | 亚洲国产成人91精品 | 日韩视频精品 | 超碰人人爱| 午夜影院在线观看 | 日本一级淫片免费看 | 欧美日韩在线免费 | 在线欧美一区 |