Ajout au contexte
Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 3 sur 18.
La page d’accueil pourrait aussi être une TemplateView, sauf que son modèle a besoin de données. Les variables qu’un modèle reçoit constituent son contexte, et une vue générique les construit dans une méthode, get_context_data(). Redéfinis-la pour ajouter les tiennes. Un site de recettes compte ses recettes rapides :
class RecipeHomeView(TemplateView):
template_name = "recipes/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["quick"] = Recipe.objects.filter(minutes__lte=30).count()
return contextTrois étapes, toujours les mêmes : super().get_context_data(**kwargs) récupère le dictionnaire créé par Django, tu ajoutes tes clés, puis tu return le dictionnaire. Le modèle reçoit ce que cette méthode renvoie.
La requête se trouve dans la méthode, elle s’exécute donc à chaque requête. En tant qu’attribut de classe, elle ne s’exécuterait qu’une seule fois, au démarrage du serveur, et le nombre ne changerait jamais.
Défi
FacileLe modèle de la page d’accueil affiche désormais aussi l’offre d’emploi la plus récente. Dans jobs/views.py, réécris HomeView en tant que TemplateView pour jobs/home.html, sans get(). Son contexte ajoute count, le nombre d’offres d’emploi, et latest, l’offre dont la date posted est la plus récente.
Appuie sur « Jouer » : la page d’accueil affiche 12 jobs open et Newest: Python Developer at Brightline.
Essayez vous-même
from django.shortcuts import render
from django.views import View
from django.views.generic import TemplateView
from .models import Job
class HomeView(View):
def get(self, request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
class AboutView(TemplateView):
template_name = "jobs/about.html"
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