http://blog.csdn.net/iloveyin/article/details/49560559
safe
讓Html標簽以及一些特殊符號(如<)生效,下面以例子說明:
# value = '<b>CPT</b>'
# 那么輸出的時候,CPT就是加粗的,如果不加safe那么顯示出來的就是純文本<b>CPT</b>
{{ value|safe }}
|
striptags
取消所有Html標簽,下面以例子說明:
# value = '<p><b>CPT</b></p>'
# 那么輸出的時候,只有CPT且沒有加粗沒有段落;如果不加的話會顯示全部文本<p><b>CPT</b></p>
{{ value|striptags }}
|
linebreaks
讓\n這種控制符號變化Html可以識別的
# value = 'CPT\nCPT'
# 那么輸出的時候,會以這樣的格式輸出<p>CPT<br>CPT</p>,注意這些標簽會生效,即會真的換行
# 很多時候在JS里調用字符串會產生語法錯誤,大部分情況是因為沒有注意到\n的存在,想想為什么?
{{ value|linebreaks }}
|
truncatechars
這是今天介紹的四個filter中唯一一個帶有參數的,用來截取字符串的一段,用法如下:
# value = 'CPTTTTTTTTTTTT'
# 那么輸出的時候,會輸出'CPT'
{{ value|truncatechars:
3
}}
|
有了這四個工具之后我們來討論一些具體問題,都是以上列舉場景的詳細情況。
不想顯示出Html標簽
一篇文章總有粗體或者什么的,總有紅色藍色的,也就說是必須要被裝飾的,但是從數據庫中取出來的只是一個長字符串,因此我們需要告訴前端如何顯示這些文字,這個時候只需要簡單的使用safe過濾器即可。
影響排版
往往問題都出現在什么時候呢?出現在截取字符串即truncatechars同時使用的時候,比如在首頁的時候我只想顯示某些文章的前100個字,也許采用truncatechars:100過濾器截取,可以采用以下方法:
{{ value|truncatechars:
100
|safe }}
|
但很多時候這樣還是會出錯,為什么呢?因為也許你截取的100個字符里Html語法本身就是錯誤的,比如有
卻沒有
。所以出錯就很顯然了,但是有些人這樣用:
{{ value|safe|truncatechars:
100
}}
|
想截取但不想渲染
很多情況都可以通過上面的句子解決,但有些時候我們並不想在首頁顯示文章摘要的時候渲染這些文字,比如正文中有些紅紅綠綠的字,但是我們顯示摘要的時候只想顯示純黑色得字,怎么辦呢?沒錯,把上面的safe直接改成striptags即可。
在Js里調用
但情況再惡心點,比如你在Js里調用,你還得考慮什么?沒錯Js是不支持換行的引號的,就是說Js里的引號只支持到一行,下面的語法在Js里是錯誤的:
var
s =
'aaaaa
bbbb'
|
但是我們不能保證從數據庫中取出來的東西都沒有換行,也許你還想截取前100個字符,也許你還想不顯示這些html標簽,好吧,看下面的代碼:
{{ value|striptags|truncatechars:
100
|linebreaks }}
|
再惡心一點?
你其實會發現空格,大於號,小於號這些東西會以 , <這些形式儲存的,所以上面的語句執行之后可能還有會 這種神奇的東西!如果這些東西出現在首頁,那是要死的節奏啊。所以下面這條語句完美解決,好吧,我得了不用上四個過濾器會死的病:
{{ value|striptags|safe|truncatechars:
100
|linebreaks }}
|
