Django a une truncatewords
balise de modèle, qui coupe le texte au nombre de mots donné. Mais il n'y a rien de tel que les truncatechars .
Quelle est la meilleure façon de couper le texte dans le modèle à une limite de longueur de caractères donnée?
django
django-templates
grigy
la source
la source
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Mise à jour
Depuis la version 1.4, Django a une balise de modèle intégrée pour cela:
la source
truncatechars
filtre ajoute un caractère d'ellipse par défaut.J'ai créé mon propre filtre de modèle, qui ajoute également "..." à la fin du (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
la source
Si vous préférez créer votre propre étiquette de modèle personnalisé, pensez à utiliser le Django util troncature en elle. 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)
la source
Le voici dans la documentation Django, balises et filtres de gabarit intégrés: truncatechars
la source
Vous devez écrire un filtre de modèle personnalisé: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
Regardez comment
truncatewords
est intégrédjango.utils.text
la source
slice
la source
truncatechars
devraient être préférées, car elles sont plus explicites.Vous pouvez atteindre votre objectif avec un code similaire:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
où
NUM_OF_CHARS_TO_TRUNCATE
est le nombre de caractères à laisser.la source
L'ajout d'un filtre "tronqué" était une demande de fonctionnalité pendant 4 ans mais a finalement atterri dans le coffre, pour autant que je sache https://code.djangoproject.com/ticket/5025 - nous devons donc attendre la prochaine version ou l'utilisation tronc.
la source