Django tem um truncatewords
template tag, que corta o texto na contagem de palavras dada. Mas não há nada como truncatechars .
Qual é a melhor maneira de cortar o texto no modelo no limite de comprimento de caracteres determinado?
Respostas:
Isso foi adicionado recentemente no Django 1.4. por exemplo:
{{ value|truncatechars:9 }}
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Atualizar
Desde a versão 1.4, o Django tem uma tag de modelo integrada para isso:
{{ value|truncatechars:9 }}
truncatechars
filtro adiciona um caractere de elipse por padrão.
Fiz meu próprio filtro de modelo, que adiciona "..." ao final da (última palavra) da string (truncada):
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
Se você preferir criar sua própria tag de template customizada, considere usar o Django util Truncator nela. A seguir está um exemplo de uso:
>>> 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 ...'
Em seguida, você pode colocá-lo em uma tag de modelo:
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)
Aqui está na documentação do Django, tags e filtros de template integrados: truncatechars
Você deve escrever um filtro de modelo personalizado: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Dê uma olhada em como truncatewords
está integradodjango.utils.text
truncatechars
deva ser preferível, por ser mais explícito.
Você pode atingir seu objetivo com um código semelhante:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
onde NUM_OF_CHARS_TO_TRUNCATE
é o número de caracteres para sair.
Adicionar um filtro "truncado" foi uma solicitação de recurso por 4 anos, mas finalmente caiu no tronco, pelo que eu entendo https://code.djangoproject.com/ticket/5025 - então temos que esperar pelo próximo lançamento ou uso tronco.