Les vistes basades en classes (Class-Based Views, CBVs) són una característica poderosa de Django que permet crear vistes reutilitzables i organitzades de manera més eficient. A diferència de les vistes basades en funcions (Function-Based Views, FBVs), les CBVs utilitzen classes per definir el comportament de les vistes, el que permet una major modularitat i reutilització del codi.
Avantatges de les Vistes Basades en Classes
- Reutilització del Codi: Les CBVs permeten heretar i reutilitzar codi, el que redueix la duplicació.
- Organització: Les CBVs organitzen el codi de manera més clara i estructurada.
- Extensibilitat: És més fàcil estendre i personalitzar el comportament de les vistes.
Tipus de Vistes Basades en Classes
Django proporciona diverses vistes basades en classes predefinides que cobreixen les operacions més comunes:
- TemplateView: Renderitza una plantilla.
- ListView: Mostra una llista d'objectes.
- DetailView: Mostra els detalls d'un objecte.
- CreateView: Crea un nou objecte.
- UpdateView: Actualitza un objecte existent.
- DeleteView: Elimina un objecte.
Exemple Pràctic: Utilitzant TemplateView
- Creació d'una Vista Basada en Classes
Primer, crearem una vista que renderitza una plantilla utilitzant TemplateView
.
# views.py from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = 'home.html'
- Configuració de l'URL
Després, configurarem l'URL per a aquesta vista.
# urls.py from django.urls import path from .views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home'), ]
- Creació de la Plantilla
Finalment, crearem la plantilla home.html
.
<!-- templates/home.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Home Page</title> </head> <body> <h1>Welcome to the Home Page!</h1> </body> </html>
Exemple Pràctic: Utilitzant ListView
- Creació d'una Vista Basada en Classes per a una Llista
Ara, crearem una vista que mostra una llista d'objectes utilitzant ListView
.
# views.py from django.views.generic import ListView from .models import Article class ArticleListView(ListView): model = Article template_name = 'article_list.html' context_object_name = 'articles'
- Configuració de l'URL
Després, configurarem l'URL per a aquesta vista.
# urls.py from django.urls import path from .views import ArticleListView urlpatterns = [ path('articles/', ArticleListView.as_view(), name='article_list'), ]
- Creació de la Plantilla
Finalment, crearem la plantilla article_list.html
.
<!-- templates/article_list.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Article List</title> </head> <body> <h1>Article List</h1> <ul> {% for article in articles %} <li>{{ article.title }}</li> {% endfor %} </ul> </body> </html>
Exercici Pràctic
Objectiu
Crear una vista basada en classes que mostri els detalls d'un article utilitzant DetailView
.
Passos
- Crear la Vista: Defineix una classe
ArticleDetailView
que utilitziDetailView
. - Configurar l'URL: Afegeix una entrada a
urls.py
per a la vista de detalls. - Crear la Plantilla: Crea una plantilla
article_detail.html
que mostri els detalls de l'article.
Solució
# views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView(DetailView): model = Article template_name = 'article_detail.html' context_object_name = 'article'
# urls.py from django.urls import path from .views import ArticleDetailView urlpatterns = [ path('articles/<int:pk>/', ArticleDetailView.as_view(), name='article_detail'), ]
<!-- templates/article_detail.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Article Detail</title> </head> <body> <h1>{{ article.title }}</h1> <p>{{ article.content }}</p> </body> </html>
Resum
Les vistes basades en classes de Django proporcionen una manera més organitzada i reutilitzable de crear vistes. Hem vist com utilitzar TemplateView
, ListView
i DetailView
per crear vistes que renderitzen plantilles, mostren llistes d'objectes i mostren els detalls d'un objecte, respectivament. Amb aquestes eines, pots crear aplicacions web més estructurades i mantenibles.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment