Подтвердить что ты не робот

Тег шаблона Django для усечения текста

В Django есть тег шаблона truncatewords слов, который обрезает текст при заданном количестве слов. Но нет ничего похожего на truncatechars.

Как лучше всего вырезать текст в шаблоне при заданном ограничении длины символа?

4b9b3361

Ответ 2

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

Обновление

Начиная с версии 1.4, Django имеет встроенный тег шаблона для этого:

{{ value|truncatechars:9 }}

Ответ 3

Я создал свой собственный фильтр шаблонов, который добавляет "..." в конец (последнее слово) строки (усеченную):

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

Ответ 6

Если вы предпочитаете создавать свой собственный тег шаблона, рассмотрите возможность использования утилиты 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)

Ответ 8

Добавление фильтра "truncate" было запросом функции на 4 года, но, наконец, приземлилось в багажнике, насколько я понимаю https://code.djangoproject.com/ticket/5025 - поэтому мы ожидаем следующего релиза или используем багаж.