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

  1. Reutilització del Codi: Les CBVs permeten heretar i reutilitzar codi, el que redueix la duplicació.
  2. Organització: Les CBVs organitzen el codi de manera més clara i estructurada.
  3. 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:

  1. TemplateView: Renderitza una plantilla.
  2. ListView: Mostra una llista d'objectes.
  3. DetailView: Mostra els detalls d'un objecte.
  4. CreateView: Crea un nou objecte.
  5. UpdateView: Actualitza un objecte existent.
  6. DeleteView: Elimina un objecte.

Exemple Pràctic: Utilitzant TemplateView

  1. 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'

  1. 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'),
]

  1. 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

  1. 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'

  1. 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'),
]

  1. 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

  1. Crear la Vista: Defineix una classe ArticleDetailView que utilitzi DetailView.
  2. Configurar l'URL: Afegeix una entrada a urls.py per a la vista de detalls.
  3. 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.

© Copyright 2024. Tots els drets reservats