Django模板語言中的Filters的使用方法

  Filters可以稱為過濾器。下面我們簡單介紹是如何使用他的。

  Filters的語法: {{ value|filter_name:參數 }}

  Django大概提供了六十個內置過濾器,下面我們簡單介紹幾個。

  首先,基本操作都知道,urls.py中:

1 from app01 import views
2 
3 urlpatterns = [
4     path('demo/', views.demo),
5 ]

  然後,views.py中:

1 def demo(request):
2     pass

  pass需要我們自己替換。

  另外創建一個demo.html显示結果。

length

  返回值的長度,作用於字符串和列表。

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     name = '徐雪'
3     return render(request,
4                   'demo.html',
5                   {
6                       'name':name
7                   })

view.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <body>
2     {{ name }}-{{ name|length }}
3 </body>

demo.html

《Django模板語言中的Filters的使用方法》

default

  如果一個變量是false或者為空,就是用默認值,否則使用變量的值。

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <body>
2     {{ bucunzai|default:'不存在' }}
3 </body>

demo.html

《Django模板語言中的Filters的使用方法》

filesizeformat

  將值格式化為一個“人類可讀”的文件尺寸

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     file_size = 123456789
3     return render(request,
4                   'demo.html',
5                   {
6                       'file_size':file_size
7                   })

views.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <body>
2     <p>
3         文件大小:
4         {{ file_size|filesizeformat }}
5     </p>
6 </body>

demo.html

《Django模板語言中的Filters的使用方法》

切片

  

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     name_list = ['張三','李四','王五','王二麻子']
3     return render(request,
4                   'demo.html',
5                   {
6                       'name_list':name_list
7                   })

views.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <p>
2     切片前:
3     {{ name_list }}<br>
4     切片后:
5     {{ name_list|slice:'1:3' }}
6 </p>

demo.html

《Django模板語言中的Filters的使用方法》

date

  時間格式化

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     from datetime import datetime
3     now = datetime.now()
4     return render(request,
5                   'demo.html',
6                   {
7                       'now':now
8                   })

views.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <p>
2     格式化之前:
3     {{ now }}<br>
4     時間格式化:
5     {{ now|date:'Y-m-d H:i:s' }}
6 </p>

demo.html

《Django模板語言中的Filters的使用方法》

safe

  Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後台添加的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文本,如果自動轉義的話显示的就是保護HTML標籤的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變量我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     safe = "<a href='https://www.baidu.com'>safe標籤</a>"
3     return render(request,
4                   'demo.html',
5                   {
6                       'safe':safe
7                   })

views.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 {{ safe|safe }}

demo.html

《Django模板語言中的Filters的使用方法》

  點擊html上面的連接就會跳轉。

truncatechars

  如果字符串字符多於指定的字符數量,那麼會被截斷。截斷的字符串將以可翻譯的省略號序列(“…”)結尾。

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 def demo(request):
2     text = '發的反對法士大夫打發士大夫大師傅大師傅士大夫地方都是發生的廣泛的的廢墟發生髮射點'
3     return render(request,
4                   'demo.html',
5                   {
6                       'text':text
7                   })

views.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 <p>
2     省略前:
3     {{ text }}<br>
4     省略后:
5     {{ text|truncatechars:20 }}
6 </p>

demo.html

《Django模板語言中的Filters的使用方法》

自定義Filters

  首先在自己的app文件夾下面創建一個Python Package,命名為templatetags。然後在這個文件夾下面新建一個py文件,我命名為myfilters.py。到這裏基本工作已完成。接下來編寫自己的自定義filters。

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 from django import template
2 register = template.Library()
3 
4 # 告訴django的模板語言我現在有一個自定義的filter語言,名字叫demo
5 @register.filter(name='demo')
6 def add_one(arg):
7     return '{} is good!'.format(arg)

myfilters.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 {% load myfilters %}
2 <!--name是從views.py中傳過來的變量,demo是myfilter.py中的filters方法-->
3 {{ name|demo }}

demo.html

《Django模板語言中的Filters的使用方法》

  上面是傳入一個值,兩個值怎麼辦?

《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

 1 from django import template
 2 register = template.Library()
 3 
 4 # 告訴django的模板語言我現在有一個自定義的filter語言,名字叫more
 5 @register.filter(name='more')
 6 def add_more(arg,arg1):
 7     '''
 8     第一個參數永遠是管道符前面的參數
 9     :param arg:管道符前面的變量
10     :param arg1:冒號後面的變量
11     :return:
12     '''
13     return '{} is {}!'.format(arg,arg1)

myfilters.py
《Django模板語言中的Filters的使用方法》
《Django模板語言中的Filters的使用方法》

1 {% load myfilters %}
2 <!--name是從views.py中傳過來的變量,more是myfilter.py中的filters方法-->
3 {{ name|more:'美麗的。' }}

demo.html

《Django模板語言中的Filters的使用方法》

 

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *