How to use truncate filter to slice text of Django template tag?
在本範例你會學到:
- 部落格或網誌的文章清單中簡短顯示內容
- Django filters(過濾器) 的使用
truncatechars
truncatechars_html
truncatewords
- 附贈
slice
在本範例你需要先準備好:
- 可以使用 Django的環境或簡單範例
- 本環境測試使用
Django==3.0.7
以上(含)
在官方文件中也解釋得蠻清楚的,我就簡單的帶過所有可以使用的相關語法:
1. truncatechars
truncatechars
從字面上的意思也很好理解,使用方式如下:
{{ value|truncatechars:7 }}
結果如下圖,可以看出他秀出了六個字<p>這是一…
,這個例子可以看出兩個小結論:
- Filters 後面所寫的數字會自動
-1
,我是填 7,但只出現 6 個 - 如果文章儲存的方式是直接存入整個
html
,這樣其他 tag 也會被算入 - 使用這個體系的 filters 會自動地在結尾上面加上
...
針對第二點,Django filters
也有相對應的解決方式,請繼續看下去!
2. truncatechars_html
直接上範例:
{{ value| truncatechars_html:7 }}
這時候大家應該有發現,這次 filter 自動忽略了 tag <p>...</p>
,直接抓取了中間的六個文字!
小提醒:如果不想要顯示 html 出現在頁面上,在要語法後面加上
safe
:
{{ value| truncatechars_html:7|safe }}
3. truncatewords(中文不適用)
這個字面上看起來好理解,但他卻不適用在中文
上面喔!他會針對句子中的標點符號或是空白來斷字,這個方式對英語系的才會有效果,中文會變得非常奇怪,變成整段字都會回傳!
4. truncatewords_html(中文不適用)
與 truncatewords
相同,不適用於中文,與上面的差別就是 html tag 會被忽略計算。
5. 同場加碼 slice
slice
這個方法是我還沒發現 truncat
體系時最常使用切割字串的方式,不過他就不會自動加上 ...
了。
他比較特別的是有點像 python List [:] 的用法,可以指定前後的位置:
{{ some_list|slice:"0:2" }}
特別的是他與 python 相同,是從 0 開始計算位置,但不能使用 -1
參考資料
truncatechars: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#truncatechars
slice: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#slice
若有任何問題與指教歡迎與我聯繫,若覺得我的內容不錯麻煩幫我隨便點個廣告,謝謝。