Der folgende Artikel ist Teil 6 der Erkundungsserie zu Django Klassenbasierten Views (CBV), in dem behandelt wird, wie man durch TemplateView und RedirectView einfache Seitenrendering und Weiterleitungen automatisiert. Im vorherigen Artikel (Teil 5) haben wir CRUD mit CreateView
, UpdateView
, und DeleteView
erstellt. Dieses Mal schauen wir, wie wir leichte Seiten und Weiterleitungen effizient gestalten können.
Um auf den vorherigen Artikel zuzugreifen, klicken Sie bitte auf den folgenden Link!
CRUD Implementierung mit CreateView, UpdateView, DeleteView
„Automatisieren Sie die Struktur einfacher Seiten und Weiterleitungen mit Django TemplateView und RedirectView!“
1. TemplateView & RedirectView, warum sind sie nötig?
TemplateView und RedirectView sind generische Klassenbasierte Views in Django, die auf die einfachsten Anwendungsfälle spezialisiert sind.
-
TemplateView
-
Es ist nützlich, wenn Sie statische Seiten oder einfache Kontexte ohne besondere Logik an eine Vorlage übergeben möchten.
-
Beispiel: „Über uns“-Seite, „FAQ“-Seite, Fehlerseiten wie 404/500 (bei separater Einstellung).
-
-
RedirectView
-
Wird verwendet, um sofort auf eine bestimmte URL zu leiten (Redirect).
-
Beispiel: Weiterleitung zu einer bestimmten Seite beim Zugriff auf die Domain-Root (
/
), einfache URL-Verkürzungsdienste, Werbeweiterleitungen für Kampagnen usw.
-
Beide konzentrieren sich auf die einfache Seitenverarbeitung, die keine Datenbankmanipulation oder Formularvalidierung erfordert, was sie von den zuvor behandelten FormView
, CreateView
usw. unterscheidet.
2. Verwendung von TemplateView
2.1 Grundstruktur
# views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = 'home.html'
-
template_name
: Der Pfad zur Vorlage, die gerendert werden soll. -
Sie müssen die
get()
-Methode nicht überschreiben, um standardmäßig die Vorlage untertemplate_name
bei GET-Anfragen zu rendern.
2.2 URLs.py Verbindung
# urls.py
from django.urls import path
from .views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]
- Beim Zugriff auf die Root-URL (
""
) wird diehome.html
Vorlage angezeigt.
2.3 Beispielvorlage: home.html
<!DOCTYPE html>
<html>
<head>
<title>Startseite</title>
</head>
<body>
<h1>Hallo! Dies ist die Startseite.</h1>
</body>
</html>
3. Übergabe von Kontextdaten an TemplateView
Wenn Sie neben der einfachen Vorlagen-rendering auch einfache Variablen an die Vorlage übergeben möchten, überschreiben Sie die get_context_data()
Methode.
from django.views.generic import TemplateView
class AboutPageView(TemplateView):
template_name = 'about.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = 'Über uns'
context['description'] = 'Diese Website ist ein Beispiel zur Einführung in Django CBV.'
return context
Dann können Sie die Variablen page_title
und description
in der Vorlage verwenden:
<!-- about.html -->
<!DOCTYPE html>
<html>
<head>
<title>{{ page_title }}</title>
</head>
<body>
<h1>{{ page_title }}</h1>
<p>{{ description }}</p>
</body>
</html>
Tipp:
TemplateView ist besonders nützlich, wenn Sie einfache Seiten ohne DB-Abfragen erstellen möchten,
Wenn mehrere Vorlagen dieselben Variablen benötigen, sollten Sie auch in Betracht ziehen, Mixin oder Basisvorlage zu verwenden.
4. Verwendung von RedirectView
4.1 Grundstruktur
# views.py
from django.views.generic import RedirectView
class BlogRedirectView(RedirectView):
pattern_name = 'blog_list' # URL-Name
# (optional) Parameter angeben, die beim URL-Reverse benötigt werden
# query_string = True # Beibehaltung des Query-Strings
# permanent = False # Permanente Weiterleitung (301 vs 302)
-
pattern_name
: Wenn Sie den URL-Namen (z. B.'blog_list'
) ausurls.py
angeben, wird beim Ausführen der View auf diesen Pfad weitergeleitet. -
Wenn
permanent=True
gesetzt ist, wird eine permanente Weiterleitung (301) durchgeführt, andernfalls erfolgt die temporäre Weiterleitung (302) als Standard. -
Mit
query_string=True
werden die vorhandenen Query-Strings (?page=2
usw.) an die weitergeleitete URL angehängt.
4.2 URLs.py Verbindung
# urls.py
from django.urls import path
from .views import BlogRedirectView, HomePageView
urlpatterns = [
path('go-to-blog/', BlogRedirectView.as_view(), name='go_to_blog'),
path('', HomePageView.as_view(), name='home'),
]
- Beim Zugriff auf
/go-to-blog/
wird auf das URL-Muster weitergeleitet, das als'blog_list'
angegeben ist.
4.3 Direkte URL-Spezifikation
Anstatt den URL-Namen können Sie auch den url
-Parameter direkt mit einem absoluten Pfad oder einem externen Link belegen.
class ExternalRedirectView(RedirectView):
url = 'https://www.djangoproject.com/'
urlpatterns = [
path('django-home/', ExternalRedirectView.as_view(), name='django_home'),
]
- So wird
/django-home/
→https://www.djangoproject.com/
weitergeleitet.
5. Beispiele für TemplateView & RedirectView
-
Hinweis-Seite: Wenn Sie ohne Datenbankanbindung eine statische Seite mit fixem Inhalt anzeigen möchten, können Sie
TemplateView
verwenden. -
FAQ / „Demnächst“ Seite: Auch nützlich, wenn Sie schnell eine Produkt-FAQ oder eine vorübergehende Wartungsseite anzeigen möchten.
-
Domain-Routen-Redirect: Sie können einfache Weiterleitungslogiken wie „Leiten Sie beim Zugriff auf die Hauptseite auf /home/ weiter“ automatisieren mit
RedirectView
. -
Verbindung zu externen Dienstleistungen: Auch gut, wenn Sie beim Zugriff auf einen bestimmten Pfad auf externe Seiten weiterleiten, wie im Fall von URL-Verkürzungen.
6. Vergleich mit FBV
Funktion | FBV (funktionsbasierte Ansicht) | TemplateView / RedirectView (klassenbasierte Ansicht) |
---|---|---|
Statische Seitenrendering (z.B. FAQ) | def faq(request): return render(request, 'faq.html') usw. direkt schreiben |
TemplateView: Seite wird automatisch gerendert, wenn nur template_name angegeben wird |
Einfache Weiterleitung | return redirect('some_url') / HttpResponseRedirect(...) verwenden |
RedirectView: Einfach URL oder pattern_name angeben und das war's |
Zusätzlichen Kontext bereitstellen | Jedes Mal context = {...} -> render(...) direkt abwickeln |
get_context_data() ermöglicht eine strukturierte und konsistente Verwaltung |
Code-Struktur / Wartung | Einfache Seiten oder Weiterleitungen sind mit FBV unproblematisch, jedoch treten bei vielen statischen Seiten oder häufigen Weiterleitungen Redundanzen auf | „Nur die notwendigen Einstellungen“ sind durch Eigenschaften oder Methoden getrennt, was die Wartung erleichtert |
Entwicklungsproduktivität (Schlüsselwort) | „Direktes Rendern, Verwendung von Redirects -> Möglichkeit der Duplizierung“ | „Zeitersparnis, Konsistenz im Code, Wartungsfreundlichkeit“ |
7. Fazit und Ausblick auf den nächsten Teil
TemplateView und RedirectView sind klassenbasierte Views, die helfen, die einfachste Seitenverarbeitung in Django-Projekten leicht zu verwalten.
Wenn keine komplexe Logik wie Datenbankanbindung oder Formularvalidierung erforderlich ist, können Sie sie verwenden, um redundanten Code zu verringern und eine saubere Projektstruktur aufrechtzuerhalten.
Jetzt können wir mit CBV die meisten essential elements of web development wie „statische Seiten“, „Weiterleitungen“, „CRUD (Erstellen/Bearbeiten/Löschen)“, „Listen/Detaillansichten“, „Formularverarbeitung“ usw. implementieren!
Im nächsten Teil (Serie 7) werden wir die häufig verwendeten Mixin in Django nutzen, um gemeinsame Funktionen einfach wiederzuverwenden, und ich werde vorführen, wie man Berechtigungen verwaltet und Anmeldeprüfungen effizient implementiert.
Frühere Artikel erneut anschauen
- Klassenbasierte Sicht (CBV) Erkundungsserie #1 – Gründe für den Wechsel von FBV zu CBV und Developer-Mindset
- Klassenbasierte Sicht (CBV) Erkundungsserie #2 – Grundstruktur der Django View-Klasse verstehen
- Klassenbasierte Sicht (CBV) Erkundungsserie #3 – Formularverarbeitung mit FormView erleichtern
- Klassenbasierte Sicht (CBV) Erkundungsserie #4 – Nutzung von ListView & DetailView
- Klassenbasierte Sicht (CBV) Erkundungsserie #5 – CRUD Implementierung mit CreateView, UpdateView, DeleteView
„Automatisieren Sie die mühsame Verarbeitung von statischen Seiten und Weiterleitungen mithilfe von TemplateView und RedirectView und machen Sie Ihr Projekt kürzer und produktiver!“
Es sind keine Kommentare vorhanden.