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 %}.
Défi
FacileLe modèle jobs/job_detail.html est prêt. Donnez à chaque offre d’emploi sa propre page :
- Dans
jobs/views.py, uneJobDetailView, uneDetailViewdeJob. - Dans
jobs/urls.py, une route"jobs/<int:pk>/"nomméedetail. - 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"]
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