Menu
CoddyTech

DetailView

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

Ogni lavoro ha bisogno di una pagina propria: trova il lavoro, mostralo e rispondi con 404 Pagina non trovata quando il lavoro non esiste. 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 modello predefinito è recipes/recipe_detail.html, e la riga viene passata come object e come recipe.

Il nome pk è importante. Una route scritta <int:id> fornisce 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

Assegna a ogni offerta di lavoro una pagina dedicata, usando il template già pronto jobs/job_detail.html.

  1. In jobs/views.py, aggiungi JobDetailView, una DetailView di Job.
  2. In jobs/urls.py, aggiungi la route "jobs/<int:pk>/" con nome detail.
  3. In job_list.html, trasforma il titolo di ogni offerta di lavoro in un link alla relativa pagina.

Fai clic su Python Developer per aprire la sua pagina, poi apri /jobs/999/: vedrai 404 Pagina non trovata.

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