django template 中自带的filter truncatewords 是无法正确截取规定长度的的字符串的。由于英语单词是按照空格区分的,而汉字不是。
源码
@register.filter(is_safe=True)
@stringfilter
def truncatewords(value, arg):
"""
Truncates a string after a certain number of words.
Argument: Number of words to truncate after.
Newlines within the string are removed.
"""
try:
length = int(arg)
except ValueError: # Invalid literal for int().
return value # Fail silently.
return Truncator(value).words(length, truncate=' ...')
在words中起作用的代码是:
words = self._wrapped.split()
也就是使用了空格分离字符。