Table of Contents
Die Template-Tags von Django bieten eine elegante Möglichkeit, Templates benutzerdefinierte Funktionen hinzuzufügen, ohne die Ansichten zu überladen oder Logik direkt in das HTML einzubetten. So können Sie dynamische, wiederverwendbare Elemente auf Ihrer gesamten Site erstellen. Als Django-Entwickler werden Sie schnell feststellen, dass die integrierten Tags zwar hilfreich sind, Sie manchmal aber ein maßgeschneidertes Verhalten benötigen. Ich habe kürzlich ein benutzerdefiniertes Tag für meinen Blog entwickelt, um einen zufällig ausgewählten Beitrag anzuzeigen. So bin ich bei der Erstellung vorgegangen und die tiefere Rolle, die benutzerdefinierte Template-Tags in Django spielen, erfahren Sie hier.
Ein benutzerdefinierter Vorlagen-Tag ist im Wesentlichen ein wiederverwendbarer Python-Ausschnitt, der Ihren Vorlagen Funktionalität hinzufügt. Mit diesen Tags können Sie auf saubere, modulare Weise Aktionen ausführen oder Daten wie verwandte Artikel oder häufig gestellte Fragen dynamisch abrufen. Das Django-Vorlagensystem eignet sich hervorragend für die Verwaltung komplexer Websites, aber für alles außerhalb der Standard-Tags sollten Sie Ihre eigenen Tags hinzufügen.
Für das Blog, das ich gerade erstelle (und es ist nicht irgendein Blog, es ist ein Haydn Ellen-Blog!), wollte ich in der Seitenleiste einen „Hervorgehobenen Beitrag“ anzeigen, der jedes Mal, wenn ein Benutzer eine Seite besucht, einen anderen Beitrag anzeigt. Dieser Ansatz hält die Seite optisch frisch und ermutigt die Leser, neue Inhalte zu entdecken. Ich werde den Prozess der Erstellung eines benutzerdefinierten Vorlagen-Tags zu diesem Zweck durchgehen.
Der erste Schritt besteht darin, Ihre benutzerdefinierten Tags zu organisieren, indem Sie in Ihrer Django-App ein Verzeichnis mit dem Namen templatetags erstellen. In diesem Verzeichnis benötigen Sie eine init.py- Datei, um anzugeben, dass es sich um ein Paket handelt. In meinem Fall habe ich eine Datei mit dem Namen featured_content.py erstellt, in der sich die benutzerdefinierte Tag-Funktion befindet.
Um das Tag selbst zu definieren, müssen Sie das Vorlagenmodul von Django sowie die Modelle und alle anderen benötigten Bibliotheken importieren. So sah die anfängliche Einrichtung für mein vorgestelltes Inhalts-Tag aus:
from django import template from myapp.models import Post import random register = template.Library()
Hier importiere ich das Vorlagenmodul von Django, um das Tag zu registrieren, und füge das Post-Modell und die Zufallsbibliothek ein, um einen zufälligen Post auszuwählen. Die Zeile register = template.Library() initialisiert die Tag-Bibliothek, in der ich meine benutzerdefinierten Tags und Filter hinzufügen werde.
Um das Tag zu erstellen, das einen zufällig ausgewählten Beitrag abruft, habe ich eine Funktion definiert und sie mit @register.simple_tag dekoriert. Dieser Dekorator macht die Funktion als einfaches Tag in Vorlagen verfügbar. Hier ist die Funktion, die ich für das Tag erstellt habe:
@register.simple_tag def get_random_global_featured_post(): featured_posts = Post.objects.filter(is_featured=True) return random.choice(featured_posts) if featured_posts else None
Diese Funktion erledigt mehrere Dinge gleichzeitig. Mithilfe von Post.objects.filter(is_featured=True) ruft sie nur Beiträge ab, die in der Datenbank als „hervorgehoben“ markiert sind. Anschließend wählt random.choice(featured_posts) einen zufälligen Beitrag aus dem Abfragesatz der hervorgehobenen Beiträge aus und stellt so sicher, dass jedes Mal ein anderer Beitrag angezeigt wird. Wenn keine Beiträge als hervorgehoben markiert sind, gibt sie als Fallback „None“ zurück, was Fehler beim Rendern verhindert.
Nachdem Sie die Tag-Funktion definiert haben, besteht der nächste Schritt darin, sie durch Laden in Vorlagen verfügbar zu machen. Fügen Sie oben in jeder Vorlage, in der Sie das Tag verwenden möchten, {% load featured_content %} hinzu. Diese Zeile weist Django an, in featured_content.py nach benutzerdefinierten Tags zu suchen.
Sobald das Tag geladen ist, ist es ganz einfach, es in einer Vorlage aufzurufen und das Ergebnis einer Variablen zuzuweisen:
{% get_random_global_featured_post as global_featured_post %}
Diese Zeile weist die Ausgabe von get_random_global_featured_post einer Vorlagenvariable namens global_featured_post zu. Dieser Schritt fügt die Daten der vorgestellten Beiträge effektiv in den Vorlagenkontext ein und ermöglicht so eine dynamische Darstellung. Bei jedem Seitenaufruf wird nun ein anderer Beitrag für den vorgestellten Abschnitt abgerufen, wodurch der Inhalt der Seitenleiste oder der Kopfzeile frisch wirkt.
Schließlich wird die Anzeige des vorgestellten Beitrags innerhalb der Vorlage mit diesem Setup einfach. Sie können prüfen, ob global_featured_post definiert ist, und wenn ja, den Titel, das Bild und alle anderen Details rendern. Hier ist ein Ausschnitt, der zeigt, wie ich den vorgestellten Beitrag angezeigt habe:
Mit diesem Code wird der vorgestellte Beitrag nur angezeigt, wenn ein zufälliger Beitrag erfolgreich abgerufen wurde. Der Truncatewords-Filter hält den Auszug kurz und das Bild, der Titel und der Link ermöglichen es den Lesern, zum vollständigen Beitrag durchzuklicken.
Hier ist eines, das ich gebaut habe, es ist die Ausgabe des Codes in diesem Tutorial (gestylt mit Tailwind CSS):
Durch das Erstellen dieses benutzerdefinierten Vorlagentags konnte ich die Logik aus den Ansichten und Vorlagen heraushalten und sicherstellen, dass die Site organisiert und die Vorlagen sauber bleiben. Das Beste daran ist, dass dieser featured_content-Tag in verschiedenen Vorlagen vollständig wiederverwendbar ist, was Zeit spart und mein Projekt organisiert hält.
Über dieses konkrete Beispiel hinaus hat der Prozess der Erstellung benutzerdefinierter Vorlagen-Tags in Django viele Möglichkeiten für die Inhaltsverwaltung meiner Site eröffnet. Ob Sie verwandte Beiträge dynamisch anzeigen, beliebte Tags anzeigen oder andere wiederverwendbare Inhalte verwalten möchten – mit benutzerdefinierten Vorlagen-Tags in Django können Sie modulare, saubere Funktionen hinzufügen. Indem die Logik aus den Ansichts- und Vorlagenebenen herausgehalten wird, tragen Vorlagen-Tags dazu bei, ein Projekt zu gewährleisten, das einfach zu warten und zu erweitern ist.
Wenn Sie feststellen, dass Sie denselben Logikschnipsel wiederholt in mehreren Vorlagen implementieren, versuchen Sie, ein benutzerdefiniertes Tag zu erstellen. Sie sparen Zeit und erstellen eine Codebasis, mit der Sie jetzt und in Zukunft problemlos arbeiten können.