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 %}.
Sfida
FacileAssegna a ogni offerta di lavoro una pagina dedicata, usando il template già pronto jobs/job_detail.html.
- In
jobs/views.py, aggiungiJobDetailView, unaDetailViewdiJob. - In
jobs/urls.py, aggiungi la route"jobs/<int:pk>/"con nomedetail. - 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"]
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