由于django提供的truncatewords对汉字不支持,而slice可以截取,但不能满足需求。
即,如果我截取文本前50个文字,如果文本没有那么多,则全部显示,如果文本字数大于50,则需要在截取后面加上三个点。
这时需要自己来写一个filter了,其实直接把slice代码修改一下就可以了:
#coding=utf8
from django.template import Library
from django.template.defaultfilters import stringfilter
register = Library()
@stringfilter
def truncatehanzi(value, arg):
"""
Truncates a string after a certain number of words including
alphanumeric and CJK characters.
Argument: Number of words to truncate after.
"""
try:
bits = []
for x in arg.split(u':'):
if len(x) == 0:
bits.append(None)
else:
bits.append(int(x))
if int(x) < len(value):
return value[slice(*bits)] + '...'
return value[slice(*bits)]
except (ValueError, TypeError):
return value # Fail silently.
register.filter('truncatehanzi', truncatehanzi)
posted on 2009-04-09 22:47
周锐 阅读(1475)
评论(3) 编辑 收藏 所属分类:
Python