Django模板标记截断文本

gri*_*igy 72 django django-templates

Django有truncatewords模板标签,它可以在给定的字数下剪切文本.但是没有像truncatechars那样的东西.在给定的字符长度限制下剪切模板中文本的最佳方法是什么?

Ban*_*jer 138

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

{{ value|truncatechars:9 }}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的doc

  • "truncatechars"正在开发最新的Django 1.9 (3认同)

cai*_*aio 52

{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Run Code Online (Sandbox Code Playgroud)

更新

从版本1.4开始,Django有一个内置的模板标签:

{{ value|truncatechars:9 }}
Run Code Online (Sandbox Code Playgroud)

  • [`truncatechars`](https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#truncatechars) 过滤器默认添加椭圆字符。 (3认同)

jki*_*jki 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
Run Code Online (Sandbox Code Playgroud)

  • 它的默认值现在是 django。 (2认同)

Dos*_*Dos 8

如果您更喜欢创建自己的自定义模板标签,请考虑在其中使用 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 ...'
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)