Django模板标签截断文本

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

这个在Django 1.4中最近被添加了。 例如:

{{ value|truncatechars:9 }} 

在这里看到文档

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

更新

从版本1.4开始,Django为此提供了一个内置的模板标签 :

 {{ value|truncatechars:9 }} 

我做了自己的模板filter,在(截尾)string的(最后一个字)的末尾加上“…”

 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 

您应该编写自定义模板filter: http : //docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters

看看如何在django.utils.text构builddjango.utils.text

这里是在Django Documentation, Built-in模板标签和filter中:truncatechars

slice

添加一个“截断”filter是一个function要求4年,但最终降落在主干,据我所知https://code.djangoproject.com/ticket/5025 – 所以我们要等待下一个版本或使用树干。

如果您更喜欢创build自己的自定义模板标签,请考虑在其中使用Django util 截断器 。 以下是一个示例用法:

 >>> 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)