Le texte ci-dessous est le 6ème article de la série d'exploration des vues basées sur les classes (CBV) de Django, abordant comment automatiser le rendu de pages simples et le traitement des redirections en utilisant TemplateView et RedirectView. Si vous avez construit des CRUD avec CreateView, UpdateView, DeleteView dans l'article précédent (5ème), cette fois nous allons explorer comment structurer plus efficacement des pages légères et des traitements de redirection.

Pour accéder à l'article précédent, cliquez sur le lien ci-dessous !

Mettre en œuvre CRUD avec CreateView, UpdateView, DeleteView


“Automatisez facilement la structure des pages et les redirections avec Django TemplateView et RedirectView !”


1. TemplateView & RedirectView, pourquoi en a-t-on besoin ?

TemplateView et RedirectView sont des vues basées sur des classes (Generic Views) spécialisées destinées aux usages les plus simples dans Django.

  1. TemplateView

    • Utile pour passer un page statique ou un contexte simple à un modèle, sans logique de traitement de données particulière.

    • Exemples : page « À propos », page « FAQ », pages d'erreur 404/500 (si configurées séparément).

  2. RedirectView

    • Utilisé pour rediriger immédiatement vers une URL spécifique.

    • Exemples : redirection vers une page spécifique lors de l'accès à la racine du domaine (/), service simple de raccourcissement d'URL, redirection pour promouvoir des campagnes, etc.

Ces deux vues se concentrent sur le traitement de pages simples qui n'exigent pas de manipulation de base de données ou de validation de formulaire, ce qui les distingue des FormView, CreateView, etc. abordés précédemment.


2. Utilisation de TemplateView

Diagramme de flux de TemplateView - Rendu HTML automatique

2.1 Structure de base

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

class HomePageView(TemplateView):
    template_name = 'home.html'
  • template_name : Spécifie le chemin du fichier modèle à rendre.

  • Vous n'avez pas besoin de redéfinir la méthode get() ; par défaut, lors d'une requête GET, le modèle spécifié dans template_name sera rendu.

2.2 Connexion à urls.py

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

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
]
  • Lorsque vous accédez à la racine de l'URL (""), le modèle home.html sera affiché.

2.3 Exemple de modèle : home.html

<!DOCTYPE html>
<html>
<head>
  <title>Page d'accueil</title>
</head>
<body>
  <h1>Bonjour ! Voici la page d'accueil.</h1>
</body>
</html>

3. Passer des données de contexte dans TemplateView

RedirectView – Redirection intelligente via un panneau routier

En plus du rendu simple de modèles, si vous souhaitez passer de simples variables au modèle, vous devez redéfinir la méthode get_context_data().

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'] = 'À propos de nous'
        context['description'] = 'Ce site est un exemple pour présenter Django CBV.'
        return context

Alors vous pouvez utiliser les variables page_title et description dans le modèle :

<!-- about.html -->
<!DOCTYPE html>
<html>
<head>
  <title>{{ page_title }}</title>
</head>
<body>
  <h1>{{ page_title }}</h1>
  <p>{{ description }}</p>
</body>
</html>

Conseil :

  • TemplateView est particulièrement utile pour créer des pages simples qui ne nécessitent pas de requêtes à la base de données,

  • En revanche, si plusieurs modèles nécessitent des variables communes, envisagez d'utiliser un Mixin ou de combiner avec un modèle de base pour les gérer.


4. Utilisation de RedirectView

4.1 Structure de base

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

class BlogRedirectView(RedirectView):
    pattern_name = 'blog_list'  # Nom de l'URL

    # (Optionnel) Vous pouvez spécifier des paramètres nécessaires lors du reverse de l'URL
    # query_string = True        # Maintenir la chaîne de requête ou non
    # permanent = False         # Redirection permanente ou non (301 vs 302)
  • pattern_name : Si vous spécifiez le nom de l'URL de urls.py (ex : 'blog_list'), lorsque la vue s'exécute, elle redirigera vers ce chemin.

  • En configurant permanent=True, une redirection permanente (301) sera réalisée, et par défaut (False) une redirection temporaire (302).

  • Si query_string=True, la chaîne de requête de l'URL d'origine (?page=2, etc.) sera également jointe à l'URL cible de redirection.

4.2 Connexion à 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'),
]
  • Si vous accédez à /go-to-blog/, vous serez redirigé vers le motif d'URL spécifié 'blog_list'.

4.3 Spécifier une URL directe

Vous pouvez également mettre directement un chemin absolu ou un lien externe dans la propriété url au lieu du nom d'URL.

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

urlpatterns = [
    path('django-home/', ExternalRedirectView.as_view(), name='django_home'),
]
  • Avec cela, vous serez redirigé de /django-home/ vers https://www.djangoproject.com/.

5. Exemples de TemplateView & RedirectView

  1. Page d'annonce : Si vous souhaitez afficher une page statique avec un contenu d'annonce fixe sans liaison avec une base de données, vous pouvez utiliser TemplateView.

  2. Page FAQ / « Prochainement » : Utile pour afficher rapidement des FAQ sur des produits ou une page de maintenance temporaire.

  3. Redirection de la racine de domaine : Une logique de redirection simple comme « rediriger vers /home/ lors de l'accès à la page principale » peut être automatisée avec RedirectView.

  4. Connexion à des liens de services externes : Comme un lien de raccourcissement d'URL, utile pour renvoyer vers des sites externes en cas d'accès à un chemin spécifique.


6. Comparaison avec FBV

Fonctionnalité FBV (vue basée sur une fonction) TemplateView / RedirectView (vue basée sur une classe)
Rendu d'une page statique (ex : FAQ) def faq(request): return render(request, 'faq.html') Écriture directe TemplateView : Il suffit de spécifier template_name pour un rendu automatique de la page
Redirection simple return redirect('some_url') / HttpResponseRedirect(...) RedirectView : Spécifiez simplement l'URL ou pattern_name
Passer des contextes supplémentaires À chaque fois context = {...}render(...), traitement manuel
Structure du code / maintenance Pour des pages courtes ou des redirections simples, FBV fonctionne, mais cela entraîne souvent des duplications avec de nombreuses pages statiques ou redirections
Productivité de développement (mot clé essentiel) “Utilisation directe de render, fonctions de redirection → potentielle duplication” “Gain de temps, cohérence du code, facilité de maintenance”

7. Conclusion et aperçu du prochain épisode

TemplateView et RedirectView sont des vues basées sur des classes qui aident à gérer facilement le traitement de pages les plus simples dans un projet Django.
Lorsque des logiques complexes telles que les interactions avec la base de données ou la validation des formulaires ne sont pas nécessaires, leur utilisation réduit le code dupliqué et maintient la structure du projet plus propre.

Nous sommes maintenant capables de mettre en œuvre la plupart des éléments essentiels du développement web avec CBV comme « pages statiques », « redirections », « CRUD (création/modification/suppression) », « liste/détails », « traitement de formulaires », etc.

Dans l'épisode suivant (série 7), nous présenterons comment réutiliser facilement des fonctionnalités communes en utilisant les Mixins souvent utilisés dans Django et comment gérer efficacement le contrôle d'accès ou le vérification de connexion.


Revoir l'article précédent

  1. Série d'exploration des vues basées sur les classes (CBV) #1 – Pourquoi passer de FBV à CBV et l'attitude d'un développeur
  2. Série d'exploration des vues basées sur les classes (CBV) #2 – Comprendre la classe View de base de Django
  3. Série d'exploration des vues basées sur les classes (CBV) #3 – Simplifier le traitement des formulaires avec FormView
  4. Série d'exploration des vues basées sur les classes (CBV) #4 – Utilisation de ListView & DetailView
  5. Série d'exploration des vues basées sur les classes (CBV) #5 – Mettre en œuvre des CRUD avec CreateView, UpdateView, DeleteView

“Automatisez le traitement des pages statiques fastidieuses et les redirections avec TemplateView et RedirectView,
et rendez votre projet plus concis et productif !”