Menu
CoddyTech

Aggiungere al contesto

Fa parte della sezione View basate su classi del percorso Django di Coddy. Lezione 3 di 18.

Anche la home page potrebbe essere una TemplateView, ma il suo template ha bisogno di dati. Le variabili che un template riceve sono il suo contesto e una vista generica le crea in un metodo, get_context_data(). Sostituiscilo per aggiungere le tue. Un sito di ricette conta le sue ricette veloci:

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 context

Tre passaggi, sempre gli stessi: super().get_context_data(**kwargs) recupera il dizionario creato da Django, tu aggiungi le tue chiavi e return il dizionario. Il template riceve ciò che questo metodo restituisce.

La query si trova all'interno del metodo, quindi viene eseguita a ogni richiesta. Come attributo della classe, verrebbe eseguita una sola volta, all'avvio del server, e il numero non cambierebbe mai.

challenge icon

Sfida

Facile

Il template della pagina iniziale mostra ora anche l'offerta di lavoro più recente. Riscrivi HomeView:

  • Una TemplateView per jobs/home.html, senza get().
  • Aggiunge al contesto count, il numero di offerte di lavoro, e latest, l'offerta con la data posted più recente.

Premi Esegui: la pagina iniziale mostra 12 jobs open e Newest: Python Developer at Brightline.

Provalo tu

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"
quiz iconMettiti alla prova

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