Django模板标签以截断文本


87

Django具有truncatewords模板标记,该标记可在给定字数下剪切文本。但是没有什么像truncatechars一样。

在给定的字符长度限制下在模板中剪切文本的最佳方法是什么?

Answers:



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

更新资料

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

{{ value|truncatechars:9 }}

由于我正在使用1.4之前的Django,因此这正是我所需要的。谢谢!
Trey Piepmeier

1
truncatechars过滤器由默认增加了一个椭圆形的字符。
cnfw

10

我制作了自己的模板过滤器,在“(截断的)字符串的末尾也添加了“ ...”:

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

2
现在默认为django。
Pulkit Sharma

6

如果您想创建自己的自定义模板标签,请考虑在其中使用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)



1

谢谢,但这不是我所需要的。
grigy 2011年

为何如此?它可以用来分割字符串。
伊格纳西奥·巴斯克斯

文档说它是用于列表的。此外,它不会在截断的文本后附加“ ...”。
grigy 2011年

1
仅当截断时才需要添加“ ...”。
grigy 2011年

2
这可以回答OP的问题,并且可以在Django的较早版本中使用。尽管truncatechars应该使用更新的版本,因为它更明确。
2014年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.