2011-03-08 111 views
55

Django有截断词模板标签,它在给定的字数下剪切文本。但是没有什么像truncatechars。给定字符长度限制时,在模板中剪切文本的最佳方式是什么?Django模板标签截断文本

回答

102

这最近已经在Django 1.4增加。例如: -

{{ value|truncatechars:9 }} 

See doc here

+2

“truncatechars”正在使用最新的Django 1.9 – 2016-07-15 08:18:40

1
+0

谢谢,但是这并不完全符合我的需要。 – grigy 2011-03-08 19:04:41

+0

如何?它可以用来切分字符串。 – 2011-03-08 19:08:26

+0

文档说它是用于列表。它也不会将“...”附加到截短的文本。 – grigy 2011-03-08 19:17:12

46
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %} 

更新

自从1.4版本, Django有一个built-in template tag此:

{{ value|truncatechars:9 }} 
+0

建立了模板标签truncatechars,因为我正在使用1.4之前的Django,这正是我所需要的。谢谢! – 2012-12-06 16:53:36

+2

更好的是,使用'…'而不是... – mlissner 2013-08-14 21:12:04

+0

['truncatechars'](https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#truncatechars)过滤器添加了一个椭圆字符默认。 – cw1998 2017-04-06 13:28:00

9

我做我自己的模板过滤器,即加“......”来(的最后一个字)的(截)字符串的结束,以及:

from django import template 
register = template.Library() 

@register.filter("truncate_chars") 
def truncate_chars(value, max_length): 
    if len(value) > max_length: 
     truncd_val = value[:max_length] 
     if not len(value) == max_length+1 and value[max_length+1] != " ": 
      truncd_val = truncd_val[:truncd_val.rfind(" ")] 
     return truncd_val + "..." 
    return value 
+0

它现在默认为django。 – 2017-11-12 08:58:40

0

如果你希望创建自己的自定义模板标签,可以考虑使用Django的UTIL它Truncator。下面是一个示例用法:

>>> from django.utils.text import Truncator 
>>> Truncator("Django template tag to truncate text") 
<Truncator: <function <lambda> at 0x10ff81b18>> 
>>>Truncator("Django template tag to truncate text").words(3) 
u'Django template tag...' 
Truncator("Django template tag to truncate text").words(1) 
u'Django...' 
Truncator("Django template tag to truncate text").chars(20) 
u'Django template t...' 
Truncator("Django template tag to truncate text").chars(10) 
u'Django ...' 

然后,你可以把它放在一个模板标签:

from django import template 
from django.utils.text import Truncator 

register = template.Library() 

@register.filter("custom_truncator") 
def custom_truncator(value, max_len, trunc_chars=True): 
    truncator = Truncator(value) 
    return truncator.chars(max_len) if trunc_chars else truncator.words(max_len)