Django имеет truncatewords
тег шаблона, который обрезает текст по заданному количеству слов. Но нет ничего лучше truncatechars .
Как лучше всего вырезать текст в шаблоне при заданном ограничении длины символа?
django
django-templates
григи
источник
источник
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Обновить
Начиная с версии 1.4, в Django для этого есть встроенный тег шаблона :
источник
truncatechars
фильтр добавляет эллипс символ по умолчанию.Я сделал свой собственный шаблонный фильтр, который также добавляет "..." в конец (последнего слова) (усеченной) строки:
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
источник
Если вы предпочитаете создавать свой собственный тег шаблона, рассмотрите возможность использования в нем 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)
источник
Вот он, в документации Django, встроенные теги и фильтры шаблонов: truncatechars
источник
Вам следует написать собственный шаблонный фильтр: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Посмотрите, как
truncatewords
встроеноdjango.utils.text
источник
slice
источник
truncatechars
следует отдавать предпочтение, поскольку они более явные.Вы можете достичь своей цели с помощью аналогичного кода:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
где
NUM_OF_CHARS_TO_TRUNCATE
количество оставленных символов.источник
Добавление фильтра «усечение» было запросом функции в течение 4 лет, но, наконец, попало в магистраль, насколько я понимаю https://code.djangoproject.com/ticket/5025 - так что нам нужно дождаться следующего выпуска или использовать хобот.
источник