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 string ‘O 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 template02 from string import replace03 04 register = template.Library()05 06 @register.filter07 def truncatechars(value, limit=75):08 09 try:10 limit = int(limit)11 except ValueError:12 return value13 14 value = unicode(value)15 16 # Retorna a string normal caso ela seja menor que o limite17 if len(value) <= limit:18 return value19 20 # Corta a string conforme o numero passado no limit21 value = value[:limit]22 23 # Separa a string24 words = value.split(' ')[:-1]25 26 # Acrescenta '...' a string cortada e retorna ela para o template27 return ' '.join(words) + '...'
Como usar
O seu uso é similar ao uso do filtro truncatewords do Django, agora é só testar!
{{ string|truncatechars }}
{{ string|truncatechars:50 }}
Legal Vinícius!
Valeu a referência!
Abraço.
Obrigado você Enrico por compartilhar primeiramente essa ideia!