Django具有truncatewords
模板标记,该标记可在给定字数下剪切文本。但是没有什么像truncatechars一样。
在给定的字符长度限制下在模板中剪切文本的最佳方法是什么?
Answers:
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
更新资料
从1.4版开始,Django为此提供了一个内置模板标签:
{{ value|truncatechars:9 }}
truncatechars
过滤器由默认增加了一个椭圆形的字符。
我制作了自己的模板过滤器,在“(截断的)字符串的末尾也添加了“ ...”:
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
如果您想创建自己的自定义模板标签,请考虑在其中使用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)
它在Django文档的内置模板标签和过滤器中:truncatechars
您应该编写一个自定义模板过滤器:http : //docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
看看如何truncatewords
内置django.utils.text
truncatechars
应该使用更新的版本,因为它更明确。
您可以使用类似的代码实现目标:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
NUM_OF_CHARS_TO_TRUNCATE
离开的字符数在哪里。
据我了解,添加“截断”过滤器已经是4年的功能请求,但最终落入了主干。https://code.djangoproject.com/ticket/5025-因此,我们必须等待下一个版本或使用树干。