在Django的模板語言中,通過使用 過濾器 來改變變量的顯示;Django的模板語言中提供了大約六十個內置過濾器。
過濾器規則:
· 過濾器的語法: {{ value|filter_name:參數 }}
· 使用管道符"|"來應用過濾器。
注意事項:
a. 過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
b. 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
c. 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
d. '|'左右沒有空格 在Django的模板語言中,通過使用 過濾器 來改變變量的顯示;Django的模板語言中提供了大約六十個內置過濾器。
過濾器規則:
· 過濾器的語法: {{ value|filter_name:參數 }}
· 使用管道符"|"來應用過濾器。
注意事項:
a. 過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
b. 過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
c. 過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
d. '|'左右沒有空格
常用過濾器:
lower |
將變量全部轉換成小寫 |
{{ value|lower}} |
如果value傳來的字符串是"Name",會顯示"name" |
upper |
將變量全部轉換成大寫 |
{{ value|upper}} |
如果value傳來的字符串是"Name",會顯示"NAME" |
default |
變量設置默認值 |
{{ value|default:"nothing"}} |
如果value沒有傳值或者值為空的話就顯示nothing |
length |
返回字符串和列表變量的長度 |
{{ value|length }} |
如 value=['a', 'b', 'c', 'd']的話,就顯示4 |
safe |
對HTML標簽和JS等語法標簽進行自動轉義 |
{{ value|safe}} |
比如:value="<script>alert('123')</script>" |
filesizeformat |
將值格式化為一個文件大小(例如 '13 KB', '4.1 MB', '102 bytes'…) |
{{ value|filesizeformat }} |
如果 value 是 123456789,輸出將會是 117.7 MB。 |
slice |
切片 |
{{ value|slice:"2:-1" }} |
如果 value="hello world" |
date |
日期時間格式化 |
{{ value|date:"Y-m-d H:i:s"}} |
如果 value=datetime.datetime.now() |
truncatechars |
截取字符串 |
{{ value|truncatechars:9}} |
如果字符串字符多於指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾,同時是數量包含在參數個數中 |
truncatewords |
截取單詞數 |
{{ value|truncatewords:3}} |
例如:‘hello girl hi baby yue ma’,得到的結果是 'hello girl h1...' |
cut |
移除與給出參數相同的字符串 |
{{ value|cut:' ' }} |
如果value為'i love you',那么將輸出'iloveyou' |
join |
按給定參數字符拼接
|
{{ value|join:"+" }} |
如果value為['i', 'love', 'you'],那么將輸出'i+love+you' |
過濾器safe
Django的模板中在進行模板渲染的時候會對HTML標簽和JS等語法標簽進行自動轉義,這樣是為了安全,django擔心這是用戶添加的數據,比如如果有人給你評論的時候寫了一段js代碼,這個評論一提交,js代碼就執行啦,這樣你是不是可以搞一些壞事兒了,寫個彈窗的死循環,那瀏覽器還能用嗎,是不是會一直彈窗啊,這叫做xss攻擊,所以瀏覽器不讓你這么搞,給你轉義了。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,后台添加的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加注了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變量我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義
過濾器案例:
lower/upper
filtertest.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>模板變量過濾器filter測試</title> 6 </head> 7 <body> 8 <div> 9 <h1>{{ str }}</h1> 10 <h1>{{ str|lower }}</h1> 11 <h1>{{ str|upper }}</h1> 12 </div> 13 </body> 14 </html>
views.py
1 def filtertest(request): 2 s="FILter" 3 return render(request,"filtertest.html",{"str":s})
渲染效果:
default
filtertest.html
1 <h1>{{ name|default:"yang" }}</h1> 2 <h1>{{ m|default:"yang" }}</h1>
views.py
1 def filtertest(request): 2 return render(request,"filtertest.html",{"m":"100"})
渲染效果: