Django模板标记截断文本

时间:2011-03-08 17:22:34

标签: django django-templates

Django有truncatewords模板标签,用于剪切给定字数的文本。但是没有像 truncatechars 那样的东西。

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

9 个答案:

答案 0 :(得分:127)

最近在Django 1.4中添加了这个。 e.g:

{{ value|truncatechars:9 }}

See doc here

答案 1 :(得分:51)

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

<强>更新

从版本1.4开始,Django就有了built-in template tag

{{ value|truncatechars:9 }}

答案 2 :(得分: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

答案 3 :(得分:3)

答案 4 :(得分:2)

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

了解truncatewords

django.utils.text的构建方式

答案 5 :(得分:2)

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

array(9) {
   ["Host"]=>
     string(24) "ultimate.bleupage.online"
     ["Connection"]=>
     string(10) "keep-alive"
     ["User-Agent"]=>
     string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
     ["Cache-Control"]=>
     string(8) "no-cache"
     ["Postman-Token"]=>
     string(36) "6330a309-ffcf-d72e-936a-bf10ff154d45"
     ["Accept"]=>
     string(3) "*/*"
     ["Accept-Encoding"]=>
     string(13) "gzip, deflate"
     ["Accept-Language"]=>
    string(26) "en-GB,en-US;q=0.8,en;q=0.6"
     ["Cookie"]=>
     string(36) "PHPSESSID=p2m0cc7sq7kn8fk2motvrobnn4"
   }

然后你可以将它放在模板标签中:

>>> 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 ...'

答案 6 :(得分:1)

答案 7 :(得分:1)

您可以使用类似的代码实现目标:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

其中NUM_OF_CHARS_TO_TRUNCATE是要离开的字符数。

答案 8 :(得分:0)

添加“truncate”过滤器是4年的功能请求,但最终登陆后备箱,据我了解https://code.djangoproject.com/ticket/5025 - 所以我们要等待下一个版本或使用trunk。