Django hat ein truncatewords
Vorlagen-Tag, das den Text bei der angegebenen Wortzahl schneidet. Aber es gibt nichts Schöneres als Truncatechars .
Was ist der beste Weg, um den Text in der Vorlage bei einer bestimmten Zeichenlänge zu schneiden?
Antworten:
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Aktualisieren
Seit Version 1.4 verfügt Django über ein integriertes Vorlagen-Tag :
{{ value|truncatechars:9 }}
truncatechars
Filter fügt standardmäßig ein Ellipsenzeichen hinzu.
Ich habe meinen eigenen Vorlagenfilter erstellt, der "..." auch am Ende (letztes Wort) der (abgeschnittenen) Zeichenfolge hinzufügt:
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
Wenn Sie lieber ein eigenes benutzerdefiniertes Vorlagen-Tag erstellen möchten, sollten Sie den Django util Truncator verwenden . Das Folgende ist ein Beispiel für die Verwendung:
>>> 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 ...'
Dann können Sie es in ein Vorlagen-Tag einfügen:
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)
Hier ist es in der Django-Dokumentation, Integrierte Vorlagen-Tags und Filter: Truncatechars
Sie sollten einen benutzerdefinierten Vorlagenfilter schreiben: http://docs.djangoproject.com/de/dev/howto/custom-template-tags/#writing-custom-template-filters
Schauen Sie sich an, wie truncatewords
eingebaut istdjango.utils.text
truncatechars
sollte dies jedoch bevorzugt werden, da dies expliziter ist.
Das Hinzufügen eines "Abschneiden" -Filters war eine Funktionsanforderung für 4 Jahre, landete aber schließlich im Kofferraum, soweit ich https://code.djangoproject.com/ticket/5025 verstehe - also müssen wir auf die nächste Veröffentlichung oder Verwendung warten Kofferraum.
Sie können Ihr Ziel mit ähnlichem Code erreichen:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
Wo NUM_OF_CHARS_TO_TRUNCATE
ist die Anzahl der Zeichen zu verlassen.