Django a une balise de modèle truncatewords
, qui coupe le texte au nombre de mots donné. Mais il n'y a rien de tel que truncatechars.
Quelle est la meilleure façon de couper le texte dans le modèle à une limite de longueur de caractères donnée?
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Mise à jour
Depuis la version 1.4, Django ont une balise de modèle intégrée pour cela:
{{ value|truncatechars:9 }}
J'ai créé mon propre filtre de modèle, qui ajoute également "..." à la fin de (dernier mot de) la chaîne (tronquée):
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
Le voici dans la Django, tags et filtres de modèles intégrés: truncatechars
Si vous préférez créer votre propre balise de modèle personnalisé, pensez à utiliser le Django util Truncator. Voici un exemple d'utilisation:
>>> 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 ...'
Ensuite, vous pouvez le mettre dans une balise de modèle:
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)
Vous devez écrire un filtre de modèle personnalisé: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Découvrez comment truncatewords
est intégré dans Django.utils.text
L'ajout d'un filtre "tronqué" a été une demande de fonctionnalité pendant 4 ans, mais a finalement atterri dans le coffre, pour autant que je comprends https://code.djangoproject.com/ticket/5025 - nous devons donc attendez la prochaine version ou utilisez le tronc.