Filter: Truncate Words

October 30th, 2007 by Thomas Schwärzl Leave a reply »

Wer kennt sie nicht. Die übermütigen Superkommentatoren in diversen Newspostings. Von “erst0r” bis “looooooooooooooooooooooooooooooooool” ist alles vertreten. Und da sind wir auch schon beim Problem. Dieses super-extra-lange Wort. Vielen Designern sind solche Dinge ein Dorn im Auge. Dank Django können wir die ganze Sache rapide kürzen.

Wir verwenden im Template einfach einen slice, z.B. so {{ comment.comment|slice:”:5″ }}

Tja, schön und gut….aber was tut man wenn “waaaaaaaaaaaaaaaaaaaaaaaaaas geeeeeeeeeeeht aaaaaab?!?!?” gespamt wird? Bei einem slice von z.B. 5 Zeichen würde nur noch “waaaa…” dran stehen. Wollen wir das? Nö.

Also muss der eigene Filter her. Damit man nicht groß nachdenken muss, wie / wo / was – hier fertig von mir geschrieben :)

from django import template
register = template.Library()
 
@register.filter
def truncatewords(s, num):
"""
Truncates a word after a given number of chars
Argument: Number of chars to truncate after
"""
    length = int(num)
    string = []
    for word in s.split():
        if len(word) > length:
            string.append(word[:length]+'...')
        else:
            string.append(word)
    return u' '.join(string)

Was geschieht nun, wenn man den Filter einsetzt? Der Filter schneidet bei jedem Wort die angegebene Anzahl ab, also wird aus unserem oben genannten “Was geht ab” ein “waaaa… geeee… aaaaa…”. Ist zwar auch nicht die Krönung der Schöpfung aber immerhin, ne? :)

In diesem Sinne – viel Spaß damit.

Advertisement

Leave a Reply