8 ответов:
{{ 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 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)
добавление фильтра" усечение " было запросом функции в течение 4 лет, но, наконец, приземлился в багажнике, насколько я понимаю https://code.djangoproject.com/ticket/5025 - так что мы должны ждать следующего релиза или использовать trunk.
Comments