Django має truncatewords
тег шаблону, який вирізає текст при заданій кількості слів. Але немає нічого подібного до різаків .
Який найкращий спосіб вирізати текст у шаблоні з заданою межею довжини символу?
Відповіді:
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Оновлення
Починаючи з версії 1.4, Django має вбудований тег шаблону для цього:
{{ value|truncatechars:9 }}
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 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
truncatechars
слід віддавати перевагу новим версіям , оскільки вони є більш явними.
Ви можете досягти своєї мети за допомогою подібного коду:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
де NUM_OF_CHARS_TO_TRUNCATE
кількість символів, які слід залишити.
Додавання фільтра "усікання" було запитом функції протягом 4 років, але нарешті потрапило в багажник, наскільки я розумію https://code.djangoproject.com/ticket/5025 - тому нам доведеться почекати наступного випуску або використання стовбур.