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.

  1. 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).

  2. 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

TemplateView Flussdiagramm – Automatische HTML-Renderung

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 unter template_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 die home.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

RedirectView – intelligente Weiterleitung auf der Autobahn

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') aus urls.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

  1. Hinweis-Seite: Wenn Sie ohne Datenbankanbindung eine statische Seite mit fixem Inhalt anzeigen möchten, können Sie TemplateView verwenden.

  2. FAQ / „Demnächst“ Seite: Auch nützlich, wenn Sie schnell eine Produkt-FAQ oder eine vorübergehende Wartungsseite anzeigen möchten.

  3. Domain-Routen-Redirect: Sie können einfache Weiterleitungslogiken wie „Leiten Sie beim Zugriff auf die Hauptseite auf /home/ weiter“ automatisieren mit RedirectView.

  4. 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

  1. Klassenbasierte Sicht (CBV) Erkundungsserie #1 – Gründe für den Wechsel von FBV zu CBV und Developer-Mindset
  2. Klassenbasierte Sicht (CBV) Erkundungsserie #2 – Grundstruktur der Django View-Klasse verstehen
  3. Klassenbasierte Sicht (CBV) Erkundungsserie #3 – Formularverarbeitung mit FormView erleichtern
  4. Klassenbasierte Sicht (CBV) Erkundungsserie #4 – Nutzung von ListView & DetailView
  5. 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!“