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

88

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

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

григи
источник

Ответы:

166

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

{{ value|truncatechars:9 }}

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

Banjer
источник
3
"truncatechars" также работает над последней
версией
61
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}

Обновить

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

{{ value|truncatechars:9 }}
Caio
источник
Поскольку я работаю с Django до 1.4, это именно то, что мне нужно. Благодарность!
Trey Piepmeier 06
1
truncatecharsфильтр добавляет эллипс символ по умолчанию.
cnfw 06
10

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

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
jki
источник
2
По умолчанию теперь это django.
Pulkit Sharma
6

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

Затем вы можете поместить его в тег шаблона:

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)
Dos
источник
1

slice

Игнасио Васкес-Абрамс
источник
Спасибо, но это не совсем то, что мне нужно.
grigy 08
Как так? Его можно использовать для разрезания струн.
Игнасио Васкес-Абрамс
В документации написано, что это для списков. Также он не добавляет "..." к усеченному тексту.
grigy 08
1
«...» нужно добавлять только в том случае, если он был усечен.
grigy 08
2
Это отвечает на вопрос OP, и это будет работать со старыми версиями Django. Хотя с более новыми версиями truncatecharsследует отдавать предпочтение, поскольку они более явные.
rectangletangle
1

Вы можете достичь своей цели с помощью аналогичного кода:

{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}

где NUM_OF_CHARS_TO_TRUNCATEколичество оставленных символов.

Абуко Сидней
источник
0

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

Храбан
источник