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