Het onderstaande artikel is het 6e deel van de verkenningsserie over Django Class-Based Views (CBV), waarin we behandelen hoe we simpele pagina-rendering en redirectverwerking kunnen automatiseren met behulp van TemplateView en RedirectView. In het vorige artikel (5e deel) hebben we CRUD geïmplementeerd met CreateView, UpdateView en DeleteView; dit keer zullen we onderzoeken hoe we lichtere pagina's en redirectverwerking efficiënt kunnen opzetten.

Voor de vorige aflevering, klik op de onderstaande link!

CRUD implementeren met CreateView, UpdateView, DeleteView


“Automatiseer eenvoudig de structuur van pagina's en redirects met Django TemplateView en RedirectView!”


1. Waarom hebben we TemplateView & RedirectView nodig?

TemplateView en RedirectView zijn class-based views (Generic Views) die zijn gespecialiseerd in de eenvoudigste toepassingen in Django.

  1. TemplateView

    • Handig voor het doorgeven van een statische pagina of eenvoudige context naar een template zonder complexe dataverwerking.

    • Bijvoorbeeld: “Over” pagina, “Veelgestelde Vragen” pagina, 404/500 fout pagina's (indien apart ingesteld) etc.

  2. RedirectView

    • Gebruikt om onmiddellijk naar een specifieke URL te redirecten.

    • Bijvoorbeeld: Redirect naar een specifieke pagina bij toegang tot de domeinroot(/), een eenvoudige verkorte URL service, campagne-promotie redirects etc.

Beide richten zich op eenvoudige pagina's zonder databaseoperaties of formuliervalidatie, wat ze anders maakt dan eerder besproken views zoals FormView, CreateView en anderen.


2. Gebruik van TemplateView

Stroomdiagram van TemplateView - HTML automatische rendering

2.1 Basisstructuur

# views.py
from django.views.generic import TemplateView

class HomePageView(TemplateView):
    template_name = 'home.html'
  • template_name: specificeert het pad naar het templatebestand dat gerenderd moet worden.

  • Zelfs zonder het get() method te overschrijven, rendert het standaard het template dat is opgegeven in template_name bij een GET-aanroep.

2.2 Verbinden met urls.py

# urls.py
from django.urls import path
from .views import HomePageView

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
]
  • Bij toegang tot de root URL ("") wordt het home.html template weergegeven.

2.3 Template Voorbeeld: home.html

<!DOCTYPE html>
<html>
<head>
  <title>Homepage</title>
</head>
<body>
  <h1>Hallo! Dit is de homepage.</h1>
</body>
</html>

3. Contextgegevens doorgeven in TemplateView

RedirectView – Slimme redirect die automatisch naar rechts draait

Bovendien, als je eenvoudige variabelen naar het template wilt doorgeven, overschrijf je de 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'] = 'Over Ons'
        context['description'] = 'Deze site is een voorbeeld ter introductie van Django CBV.'
        return context
page_title en description variabelen in het template gebruiken:
<!-- about.html -->
<!DOCTYPE html>
<html>
<head>
  <title>{{ page_title }}</title>
</head>
<body>
  <h1>{{ page_title }}</h1>
  <p>{{ description }}</p>
</body>
</html>

Tip:

  • TemplateView is bijzonder nuttig voor het maken van eenvoudige pagina's die geen databasequery vereisen,

  • Als je echter gemeenschappelijke variabelen in meerdere templates nodig hebt, overweeg dan om te combineren met een Mixin of een basis template.


4. Gebruik van RedirectView

4.1 Basisstructuur

# views.py
from django.views.generic import RedirectView

class BlogRedirectView(RedirectView):
    pattern_name = 'blog_list'  # URL naam

    # (optioneel) Parameters voor URL reversie kunnen hier worden opgegeven
    # query_string = True        # Of de querystring behouden moet worden
    # permanent = False         # Of het een permanente redirect betreft (301 vs 302)
  • pattern_name: Als je de URL naam (bijv. 'blog_list') uit urls.py opgeeft, wordt tijdens het uitvoeren van de view naar die pad geredirect.

  • Als je permanent=True instelt, zal het een permanente redirect (301) uitvoeren, anders wordt de standaard (False) een tijdelijke redirect (302) uitgevoerd.

  • Als je query_string=True instelt, dan wordt de bestaande querystring van de URL (?page=2 etc.) ook op de redirectdoel-URL toegevoegd.

4.2 Verbinden met urls.py

# 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'),
]
  • Bij toegang tot /go-to-blog/ wordt naar de URL-patroon dat als 'blog_list' is opgegeven, geredirect.

4.3 Directe URL opgeven

In plaats van een URL-naam, kun je ook direct een absoluut pad of externe link in de url eigenschap invoeren.

class ExternalRedirectView(RedirectView):
    url = 'https://www.djangoproject.com/'

urlpatterns = [
    path('django-home/', ExternalRedirectView.as_view(), name='django_home'),
]
  • Dit zorgt ervoor dat /django-home/https://www.djangoproject.com/ geredirect wordt.

5. Voorbeelden van TemplateView & RedirectView

  1. Mededeling pagina: Als je een statische pagina wilt tonen met vaste mededelingsteksten zonder database-integratie, kun je TemplateView gebruiken.

  2. FAQ / ‘Binnenkort’ pagina: Handig voor het snel aanbieden van product FAQ's of tijdelijke onderhoudspagina's.

  3. Redirect van domeinroot: Eenvoudige redirect logica zoals “haal de hoofd pagina op en redirect naar /home/” kan worden geautomatiseerd met RedirectView.

  4. Verbinding met externe dienstlinks: Net zoals een verkorte URL, wanneer iemand naar een specifieke route gaat en naar een externe site wordt gestuurd.


6. Vergelijking met FBV

Functionaliteit FBV (Functie Gegevens View) TemplateView / RedirectView (Class-Based View)
Statische pagina rendering (bijv. FAQ) def faq(request): return render(request, 'faq.html') etc. direct geschreven TemplateView: Pagina'rendering geautomatiseerd door alleen template_name op te geven
Eenvoudige redirects return redirect('some_url') / HttpResponseRedirect(...) gebruiken RedirectView: Gegevens kan doorgeven van slechts een URL of pattern_name
Extra context gegevens doorgeven Elke keer context = {...} -> render(...) verwerken Mogelijkheid tot beheer via get_context_data() op een gestructureerde en consistente manier
Code structuur / Onderhoud Hoewel korte pagina's of eenvoudige redirects FBV geen probleem zijn, ontstaat er duplicatie wanneer er veel statische pagina's of redirects zijn. “Enkele instellingen als eigenschappen of methoden gescheiden” maken onderhoud gemakkelijker.
Ontwikkelingsproductiviteit (sleutelwoorden) “Directe render-, redirect functies gebruiken -> mogelijkheid tot duplicatie” “Tijd besparen, consistentie in code, onderhoudsverbetering”

7. Slotopmerkingen en volgende aflevering aankondiging

TemplateView en RedirectView zijn class-based views die helpen bij het eenvoudig beheren van de eenvoudigste pagina verwerkingen binnen een Django project.
Bij het ontbreken van complexe logica zoals database-integratie of formuliervalidatie kunnen deze helpen om gedupliceerde code te verminderen en de projectstructuur netter te houden.

Nu kunnen we met CBV de meeste essentiële elementen van webontwikkeling zoals “statische pagina’s”, “redirects”, “CRUD (creëren/bijwerken/verwijderen)”, “lijsten/gedetailleerde weergaven”, “formulierverwerking” implementeren!

In de volgende aflevering (serie 7) gaan we kijken naar het gebruiken van de Mixin binnen Django om gemeenschappelijk functies eenvoudig te hergebruiken, en het efficiënt implementeren van toegangsbeheer of inlogcontrole.


Bekijk de vorige artikelen opnieuw

  1. Verkenningsserie over Class-Based Views (CBV) #1 - De reden om van FBV naar CBV te gaan en de houding van ontwikkelaars
  2. Verkenningsserie over Class-Based Views (CBV) #2 - Basisstructuur van Django's View Classes begrijpen
  3. Verkenningsserie over Class-Based Views (CBV) #3 - Eenvoudiger formulierverwerking met FormView
  4. Verkenningsserie over Class-Based Views (CBV) #4 - Gebruik van ListView & DetailView
  5. Verkenningsserie over Class-Based Views (CBV) #5 - CRUD implementeren met CreateView, UpdateView, DeleteView

“Automatiseer het moeizame beheer van statische pagina's en redirects met TemplateView en RedirectView, en maak uw project overzichtelijker en productiever!”