2009
24.10

Os filtros do Django

Os filtros providos pelo Django para o uso nos templates é sem dúvida alguma uma facilidade incrível desse framework, que ainda possibilita a criação de seus próprios filtros.

O filtro truncatewords acoplado no framework é usado para cortar ’strings’ após um certo número de palavras que é definido por você,  assim assumindo como exemplo a stringO Django é um dos  melhores frameworks web!”  e o número de palavras 3, o filtro retornaria o seguinte resultado  O Django é…’.

Ótimo para usar naquelas chamadas de conteúdo, não!?

Seria, mas não é! Pois cortar strings após um certo número de caractares é meio complicado, pensando na seguinte situação:

Duas ’strings’ a 01 e 02:

  • 01) “O ovo caiu no chão e sujou tudo” (total de palavras: 08)
  • 02) “Os tomates foram comprados ontem de manhã” (total de palavras: 07)

Perceba que a string 02 mesmo sendo menor no total de palavras em relação a string 01, é maior no tamanho por possuir mais caracteres em cada palavra. O resultado das duas strings utilizando o filtro truncatewords seria:

  • 01) “O ovo caiu no chão…” (total de caracteres: 18)
  • 02) “Os tomates foram comprados ontem de…” (total de caracteres: 35)

Se nas suas chamadas você quisesse manter um padrão de tamanho seria impossível desse modo né!? Mas e se criassemos o nosso próprio filtro!? Só que ao invés de cortar após um número de palvras, cortar por números de caracteres.

Foi exatamente isso que meu novo amigo Enrico Batista fez,  criou um filtro que após um certo número de caracteres corta as strings de maneira uniforme, no qual fiz pequenas modificações para usar em meu projeto, e que disponibilizo aqui para vocês.

O filtro

01
from django import template
02
from string import replace	
03
 
04
register = template.Library()
05
 
06
@register.filter
07
def truncatechars(value, limit=75):
08
 
09
    try:
10
        limit = int(limit)
11
    except ValueError:
12
        return value
13
 
14
    value = unicode(value)
15
 
16
    # Retorna a string normal caso ela seja menor que o limite 
17
    if len(value) <= limit:
18
        return value
19
 
20
    # Corta a string conforme o numero passado no limit
21
    value = value[:limit]
22
 
23
    # Separa a string
24
    words = value.split(' ')[:-1]
25
 
26
    # Acrescenta '...' a string cortada e retorna ela para o template 
27
    return ' '.join(words) + '...'

 

Como usar

O seu uso é similar ao uso do filtro truncatewords do Django, agora é só testar!

        {{ string|truncatechars }}
        {{ string|truncatechars:50 }}

* Posts relacionados

2 comentários

Deixe seu comentário
  1. Legal Vinícius!
    Valeu a referência! :)
    Abraço.

  2. Obrigado você Enrico por compartilhar primeiramente essa ideia!