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.
-
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).
-
-
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
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é danstemplate_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èlehome.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
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 deurls.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/
vershttps://www.djangoproject.com/
.
5. Exemples de TemplateView & RedirectView
-
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
. -
Page FAQ / « Prochainement » : Utile pour afficher rapidement des FAQ sur des produits ou une page de maintenance temporaire.
-
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
. -
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
- 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
- Série d'exploration des vues basées sur les classes (CBV) #2 – Comprendre la classe View de base de Django
- Série d'exploration des vues basées sur les classes (CBV) #3 – Simplifier le traitement des formulaires avec FormView
- Série d'exploration des vues basées sur les classes (CBV) #4 – Utilisation de ListView & DetailView
- 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 !”
Aucun commentaire.