DetailView
Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 5 sur 18.
Chaque emploi a besoin de sa propre page : trouver l’emploi, l’afficher et répondre par une erreur 404 Page non trouvée lorsqu’il n’existe pas d’emploi correspondant. C’est le rôle de DetailView. Sur un site de recettes :
class RecipeDetailView(DetailView):
model = Recipe
# urls.py
path("recipes/<int:pk>/", views.RecipeDetailView.as_view(), name="recipe")Une DetailView lit la clé primaire de la ligne dans l’argument d’URL nommé pk et recherche la ligne comme le fait get_object_or_404(). Son modèle utilise par défaut recipes/recipe_detail.html, et la ligne est accessible sous les noms object et recipe.
Le nom pk est important. Une route écrite <int:id> transmet à la vue un argument qu’elle ne recherche pas, et la page plante avec une AttributeError indiquant qu’elle attend un pk d’objet ou un slug.
Un lien transmet le pk de la ligne au nom de la route : {% url 'recipes:recipe' recipe.pk %}.
Défi
FacileAttribue à chaque offre d’emploi sa propre page, avec le modèle prêt à l’emploi jobs/job_detail.html.
- Dans
jobs/views.py, ajouteJobDetailView, uneDetailViewdeJob. - Dans
jobs/urls.py, ajoute la route"jobs/<int:pk>/"nomméedetail. - Dans
job_list.html, transforme le titre de chaque offre d’emploi en lien vers sa page.
Clique sur Python Developer pour ouvrir sa page, puis ouvre /jobs/999/ : tu vois « Page introuvable » (404).
Essayez vous-même
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"]
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Vues basées sur des classes
Entraînez-vous par vous-même : Playground Django