Тег шаблона Django для усечения текста - PullRequest
67 голосов
/ 08 марта 2011

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

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

Ответы [ 8 ]

131 голосов
/ 24 апреля 2012

Это было недавно добавлено в Django 1.4.Например:

{{ value|truncatechars:9 }}

См. документ здесь

51 голосов
/ 18 марта 2011
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}

Обновление

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

{{ value|truncatechars:9 }}
9 голосов
/ 11 августа 2011

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

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 голосов
/ 09 января 2012
2 голосов
/ 17 ноября 2017

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

Вы должны написать собственный фильтр шаблона: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters

Посмотрите, как встроен truncatewords django.utils.text

1 голос
/ 08 марта 2011
0 голосов
/ 11 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...