truncatewords過濾器在省略號之前插入一個空格。如, 「一個美麗的節日食譜的書......」
主場迎戰期望
「的罰款節日食譜書......」如何在沒有最終空格的情況下使用truncatewords在Django模板中添加省略號?
是否有一個簡單的方法來得到這個過濾器不把那裏有空間?我可以非常輕鬆地在視圖中處理這個問題,但寧願在模板中執行此操作 - 最好不創建自定義過濾器。歡迎任何建議。
truncatewords過濾器在省略號之前插入一個空格。如, 「一個美麗的節日食譜的書......」
主場迎戰期望
「的罰款節日食譜書......」如何在沒有最終空格的情況下使用truncatewords在Django模板中添加省略號?
是否有一個簡單的方法來得到這個過濾器不把那裏有空間?我可以非常輕鬆地在視圖中處理這個問題,但寧願在模板中執行此操作 - 最好不創建自定義過濾器。歡迎任何建議。
有在Djangosnippets一堆模板過濾器,並this one looks pretty neat:
# From http://djangosnippets.org/snippets/1259/
from django import template
register = template.Library()
@register.filter
def truncatesmart(value, limit=80):
"""
Truncates a string after a given number of chars keeping whole words.
Usage:
{{ string|truncatesmart }}
{{ string|truncatesmart:50 }}
"""
try:
limit = int(limit)
# invalid literal for int()
except ValueError:
# Fail silently.
return value
# Make sure it's unicode
value = unicode(value)
# Return the string itself if length is smaller or equal to the limit
if len(value) <= limit:
return value
# Cut the string
value = value[:limit]
# Break into words and remove the last
words = value.split(' ')[:-1]
# Join the words and return
return ' '.join(words) + '...'
這也將工作:
{{ value|truncatewords:3|slice:"-4" }}...
基本上,只要切下最後4個字符(橢圓加空格) ,然後添加它沒有空間!
整潔的事情是,用這種方法,你也可以用你想要的任何東西結束你的呃截斷。
這種方法的一個明顯問題是,如果你的'value'比傳遞給'truncatewords'的數字更短,那麼你只需切掉最後4個字符並添加一個橢圓。當然,你可以通過測量'value'的長度和使用'if'循環來解決這個問題。 – tankadillo 2012-08-08 01:19:48
除了上面提到的過多截斷之外,即使字符串足夠短,也會一直添加'...'(例如'「blah」| truncatewords:3'會顯示'blah',而不是'blah ...')。 – dbr 2012-09-06 20:02:14
爲了讓jbpjackson和dbr的評論換句話說,請不要這樣做。 – slypete 2013-07-10 18:40:35
是的,我有類似的功能的意見。我認爲不妨製作一個模板標籤,嗯?感謝您的鏈接。 – JAL 2010-11-03 00:44:31
嗯,問題仍然是爲什麼默認的Django行爲是當這是不正確的時候插入一個空格。 – thepeer 2011-02-22 17:23:23