用于截断文本的Django模板标记

wi3ka0sx  于 2022-12-20  发布在  Go
关注(0)|答案(9)|浏览(171)

Django有truncatewords模板标签,它会在给定的字数处剪切文本,但是没有什么比 truncatechars 更好的。
在给定的字符长度限制下剪切模板中的文本的最佳方法是什么?

62lalag4

62lalag41#

如果您继续创建自己的自定义模板标记,请考虑使用原生Django util Truncator
以下是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").chars(20)
u'Django template t...'

下面介绍如何在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_words=False):
    """ Set trunc_words=True to truncate by words instead of by chars."""
    truncator = Truncator(value)
    return truncator.words(max_len) if trunc_words else truncator.chars(max_len)

最终你可以在任何Django模板中导入 custom_truncator

zxlwwiss

zxlwwiss2#

在Django文档中,内置模板标签和过滤器:截断的

ftf50wuq

ftf50wuq3#

您应该编写一个自定义模板筛选器:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
看看truncatewords是如何在django.utils.text中构建的

gkl3eglg

gkl3eglg4#

您可以使用类似的代码实现您的目标:
第一个月
其中NUM_OF_CHARS_TO_TRUNCATE是要留下的字符数。

d4so4syb

d4so4syb6#

添加一个“截断”过滤器是4年来的一个特性请求,但最终落在了 Backbone.js 上,据我所知https://code.djangoproject.com/ticket/5025-所以我们必须等待下一个版本或使用 Backbone.js 。

v1uwarro

v1uwarro7#

这是最近在Django 1.4中添加的。例如:

{{ value|truncatechars:9 }}

参见此处的文档

bqf10yzr

bqf10yzr8#

{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
    • 更新**

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

{{ value|truncatechars:9 }}
uurv41yg

uurv41yg9#

我做了我自己的模板过滤器,添加“...”结束(最后一个字)的(截断)字符串以及:

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

相关问题