Bei der Entwicklung mit Django ist das Arbeiten mit Zeichenfolgen eine alltägliche Aufgabe. Es ist notwendig, Benutzereingaben zu bereinigen, URLs zu erstellen und Texte zusammenzufassen. django.utils.text ist ein Modul, das eine Vielzahl von leistungsstarken und praktischen Utility-Funktionen für diese alltäglichen Textverarbeitungen bereitstellt. 🧰

In diesem Beitrag werden wir die nützlichsten und am häufigsten verwendeten Kernfunktionen des Moduls django.utils.text ansehen.


1. Perfekter Umwandler für URLs: slugify



Es ist nicht übertrieben, zu sagen, dass dies die bekannteste Funktion des Moduls ist. Slug bezeichnet das vereinfachte Format eines Titels oder einer Zeichenfolge, das hauptsächlich als Bestandteil einer URL verwendet wird.

slugify wandelt Zeichenfolgen wie folgt um:

  • Ändert sie in Kleinbuchstaben.
  • Ersetzt Sonderzeichen (einschließlich Leerzeichen) durch einen Bindestrich (-).
  • Entfernt alle Zeichen, die keine Buchstaben, Zahlen, Bindestriche oder Unterstriche (_) sind.

Beispiel:

from django.utils.text import slugify

title = "Django 5.0 Release! Was gibt's Neues?"
slug = slugify(title)

print(slug)
# Ergebnis: 'django-50-release-was-gibts-neues'
# Jetzt kann dieser Wert in einer URL wie /blog/django-50-release-was-gibts-neues/ verwendet werden.

<Wichtig> Unterstützung für CJK-Sprachen (Chinesisch, Japanisch, Koreanisch) und Unicode: Standardmäßig behält slugify nur ASCII-Zeichen. Um Unicode-Zeichen von CJK-Sprachen in den Slug einzuschließen, muss die Option allow_unicode=True unbedingt verwendet werden.

title_ko = "Django Utilities Zusammenfassung"

# Standard (Koreanisch verschwindet)
print(slugify(title_ko))
# Ergebnis: '' (leere Zeichenfolge)

# Unicode zulassen
print(slugify(title_ko, allow_unicode=True))
# Ergebnis: '장고-유틸리티-총정리'

2. Sicheres Erstellen von Dateinamen: get_valid_filename

Es ist sehr gefährlich, Dateinamen von Benutzern direkt auf dem Server zu speichern. Dateinamen könnten Zeichen wie ../ (Verzeichnissuche) oder spezielle Zeichen, die unter Windows nicht zulässig sind (:, *, ?), enthalten.

get_valid_filename stellt sicher, dass solche gefährlichen Zeichen oder systemreservierte Wörter durch sichere Zeichen (hauptsächlich den Unterstrich _) ersetzt werden, sodass nur gültige Dateinamen zurückgegeben werden.

Beispiel:

from django.utils.text import get_valid_filename

# Vom Benutzer böswillig hochgeladener Dateiname
user_filename = "../../geheimnisse/pa$$word.txt"
safe_name = get_valid_filename(user_filename)

print(safe_name)
# Ergebnis: '.._.._geheimnisse_pa__word.txt'

# Systemreservierte Zeichen
windows_filename = "CON:MyFile.pdf"
safe_name_2 = get_valid_filename(windows_filename)
print(safe_name_2)
# Ergebnis: '_CON_MyFile.pdf'

3. Erstellen einer prägnanten Zusammenfassung: truncatechars / truncatewords



Diese Funktion wird häufig verwendet, um in einer Blogübersichtsseite einen langen Text kurz darzustellen. Sie ist auch als Django-Template-Filter (|truncatechars:50) bekannt, kann aber auch auf Python-Code-Ebene direkt verwendet werden.

  • truncatechars(text, length): Schneidet nach einer Anzahl von length Zeichen (einschließlich Leerzeichen) und fügt, falls abgeschnitten, am Ende ... (Standard) hinzu.
  • truncatewords(text, num): Schneidet auf Basis einer Anzahl von num Wörtern und fügt, falls abgeschnitten, ... hinzu.

Beispiel:

from django.utils.text import truncatechars, truncatewords

long_text = "Django ist ein hochentwickeltes Python-Webframework, das eine schnelle Entwicklung fördert."

# 1. Basierend auf der Anzahl der Zeichen (20 Zeichen)
summary_chars = truncatechars(long_text, 20)
print(summary_chars)
# Ergebnis: 'Django ist ein hoch...'

# 2. Basierend auf der Anzahl der Wörter (5 Wörter)
summary_words = truncatewords(long_text, 5)
print(summary_words)
# Ergebnis: 'Django ist ein hochentwickeltes Python...'

4. Nur den ersten Buchstaben groß: capfirst

Ein einfaches, aber überraschend häufig verwendetes Utility. Es macht nur den ersten Buchstaben einer Zeichenfolge groß. Nützlich für kleine Formatierungen, wie beim Anzeigen von verbose_name eines Modells in einem Template.

Beispiel:

from django.utils.text import capfirst

label = "benutzername"
formatted_label = capfirst(label)

print(formatted_label)
# Ergebnis: 'Benutzername'

5. Natürliche Listenumwandlung: get_text_list

Es wandelt eine Python-Liste (list) in einen leicht lesbaren Satz um. Vor dem letzten Element wird „und“ (oder ein anderes Konjunktion) hinzugefügt.

Beispiel:

from django.utils.text import get_text_list

# Bei mehreren Elementen (Standard: 'und')
items_1 = ['Apfel', 'Banane', 'Kirsche']
print(get_text_list(items_1))
# Ergebnis: 'Apfel, Banane und Kirsche'

# Konjunktion ändern (z. B. 'oder')
items_2 = ['E-Mail', 'SMS']
print(get_text_list(items_2, 'oder'))
# Ergebnis: 'E-Mail oder SMS'

# Bei nur einem Element
items_3 = ['Django']
print(get_text_list(items_3))
# Ergebnis: 'Django'

Zusammenfassung

Das Modul django.utils.text löst nahezu alle „Feinheiten“, die beim Umgang mit Text in der Django-Entwicklung erforderlich sind. Durch die geschickte Nutzung dieses Moduls kann Ihr Code sauberer werden und potenzielle Sicherheitsprobleme bei der Verarbeitung von URLs oder Dateinamen vermieden werden.

Insbesondere slugify und get_valid_filename können als unverzichtbare Utilities in einem Django-Projekt betrachtet werden.