posts - 431,  comments - 344,  trackbacks - 0
由于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

只有注册用户登录后才能发表评论。


网站导航: