Balise de modèle Django pour tronquer le texte

Django a une balise de modèle truncatewords , qui coupe le texte au nombre de mots donné. Mais il n’y a rien comme truncatechars . Quelle est la meilleure façon de couper le texte dans le modèle à une longueur de caractère donnée?

Cela a récemment été ajouté à Django 1.4. par exemple:

{{ value|truncatechars:9 }} 

Voir doc ici

 {{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %} 

Mettre à jour

Depuis la version 1.4, Django a un tag de template intégré pour cela:

 {{ value|truncatechars:9 }} 

J’ai créé mon propre filtre de modèle, qui ajoute “…” à la fin du dernier mot de la chaîne (tronquée) également:

 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 

Ici, il est dans la documentation de Django, les balises de modèle et les filtres intégrés: truncatechars

Vous devez écrire un filtre de modèle personnalisé: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters

Jetez un oeil à la façon dont les django.utils.text truncatewords sont intégrés dans django.utils.text

slice

Si vous préférez créer votre propre tag de template personnalisé, pensez à utiliser le truncator de Django util. Voici un exemple d’utilisation:

 >>> from django.utils.text import Truncator >>> Truncator("Django template tag to truncate text")  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 template:

 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) 

Ajouter un filtre “tronqué” était une demande de fonctionnalité pendant 4 ans mais finalement atterri dans le tronc, pour autant que je sache https://code.djangoproject.com/ticket/5025 – nous devons donc attendre la prochaine version ou utilisation tronc.