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



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

1426   8  

8 ответов:

это недавно было добавлено в 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

вы должны написать пользовательский шаблон фильтра: 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

    Ничего не найдено.