Menu
CoddyTech

DetailView

Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 5 sur 18.

Chaque recette a besoin de sa propre page : trouvez la ligne, affichez-la et répondez avec une erreur 404 s’il n’y en a aucune. 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 est par défaut recipes/recipe_detail.html, et la ligne est disponible sous les noms object et recipe.

Le nom pk est important. Une route écrite <int:id> fournit à 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 à la route nommée : {% url 'recipes:recipe' recipe.pk %}.

challenge icon

Défi

Facile

Le modèle jobs/job_detail.html est prêt. Donnez à chaque offre d’emploi sa propre page :

  • Dans jobs/views.py, une JobDetailView, une DetailView de Job.
  • Dans jobs/urls.py, une route "jobs/<int:pk>/" nommée detail.
  • Dans job_list.html, faites du titre de chaque offre d’emploi un lien vers sa page.

Cliquez sur Run, ouvrez /jobs/ et cliquez sur un titre.

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"]
quiz iconTestez-vous

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