Menu
CoddyTech

DetailView

Fa parte della sezione View basate su classi del percorso Django di Coddy. Lezione 5 di 18.

Ogni elemento ha bisogno di una pagina propria: trova la riga, mostralo e rispondi con 404 quando non c'è. Questo è DetailView. In un sito di ricette:

class RecipeDetailView(DetailView):
    model = Recipe


# urls.py
path("recipes/<int:pk>/", views.RecipeDetailView.as_view(), name="recipe")

Una DetailView legge la chiave primaria della riga dall'argomento dell'URL chiamato pk e cerca la riga come fa get_object_or_404(). Il suo template predefinito è recipes/recipe_detail.html e la riga viene resa disponibile come object e come recipe.

Il nome pk è importante. Una route scritta <int:id> passa alla vista un argomento che non cerca e la pagina va in errore con un AttributeError che richiede un pk o uno slug dell'oggetto.

Un link passa il pk della riga al nome della route: {% url 'recipes:recipe' recipe.pk %}.

challenge icon

Sfida

Facile

Il template jobs/job_detail.html è pronto. Assegna a ogni offerta di lavoro una pagina dedicata:

  • In jobs/views.py, una JobDetailView, una DetailView di Job.
  • In jobs/urls.py, una route "jobs/<int:pk>/" chiamata detail.
  • In job_list.html, rendi il titolo di ogni offerta di lavoro un link alla relativa pagina.

Premi Run, apri /jobs/ e fai clic su un titolo.

Provalo tu

from django.views.generic import ListView, TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"


class JobListView(ListView):
    model = Job
    context_object_name = "jobs"
    ordering = ["-posted"]
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di View basate su classi

Esercitati da solo: Playground Django