English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Vues génériques Django

Dans certains cas, écrire du code de vue, comme nous l'avons vu précédemment, peut être vraiment fastidieux. Imaginez seulement avoir besoin d'une page statique ou d'une page de liste. Django propose également une méthode simple pour configurer ces vues simples, appelées vues génériques.

Contrairement aux vues traditionnelles, une vue générale est une classe sans fonction. Django propose également un ensemble de vues génériques, django.views.generic, et chaque vue ordinaire est une de ces classes ou hérite d'une de ces classes.

Il y a10+Classe générique −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
>>> import django.views.generic
 >>> dir(django.views.generic)
 ['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView', 
    'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView', 
    'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView', 
    'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__', 
    '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 
    'detail', 'edit', 'list'

Vous pouvez utiliser des vues génériques. Laissons voir quelques exemples pour voir comment cela fonctionne.

Pages web statiques

Laissons-nous publier la page statique à partir du modèle "static.html".

notre static.html −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body> 
       Ceci est une page statique!!! 
    </body>
 </html>

Si nous le faisons ainsi, comme nous l'avons appris auparavant, nous devons modifier myapp/views.py −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 def static(request):
    return render(request, 'static.html', {})

myapp/urls.py sera comme suit -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

La meilleure méthode est d'utiliser les vues génériques. À cet égard, notre myapp/views.py deviendra -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import TemplateView
 class StaticView(TemplateView):
    template_name = "static.html"

Quant à notre myapp/urls.py sera comme suit -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from myapp.views import StaticView
 from django.conf.urls import patterns
 urlpatterns = patterns("myapp.views", url(r'^static/, StaticView.as_view()),)   ,   StaticView.as_view()),)

Lorsque vous accédez à /myapp/static deviendra -

Pour obtenir le même résultat, nous pouvons également exécuter les opérations suivantes -

Il n'est pas nécessaire de modifier views.py        Modifiez le fichier url.py comme suit -    

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import TemplateView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^static/', TemplateView.as_view(template_name = 'static.html')),)

Comme vous pouvez le voir, il suffit de changer la deuxième méthode du fichier url.py.

Liste et affichage des données de la base de données

Nous devons lister tous les éléments du modèle Dreamreal. De cette manière, l'utilisation de la classe de vue générique ListView devient facile. Éditez le fichier url.py et mettez-le à jour -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns(
    "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal, 
       template_name = "dreamreal_list.html")),
 )

Il est important de noter que, à ce point, les variables passent par la vue générique vers le modèle object_list. Si vous souhaitez utiliser votre propre nom, vous devrez ajouter un paramètre context_object_name à la méthode as_view. Ensuite, url.py devient -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^dreamreals/', ListView.as_view(),
       template_name = "dreamreal_list.html")),
       model = Dreamreal, context_object_name = "dreamreals_objects",)

Ensuite, le template lié deviendra −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
{% extends "main_template.html" %}
 {% block content %}
 Dreamreals:<p>
 {% for dr in object_list %}
 {{dr.name}}</p>
 {% endfor %}
 {% endblock %}

Accès /myapp/dreamreals/ Produira la page suivante −