Menu
CoddyTech

Dodawanie do kontekstu

Część sekcji Widoki oparte na klasach ścieżki Django w Coddy. Lekcja 3 z 18.

Strona główna również może być widokiem TemplateView, ale jej szablon potrzebuje danych. Zmienne przekazywane do szablonu tworzą jego kontekst, a widok ogólnego przeznaczenia tworzy je w metodzie get_context_data(). Nadpisz ją, aby dodać własne dane. Serwis z przepisami zlicza szybkie przepisy:

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

Trzy kroki, zawsze takie same: super().get_context_data(**kwargs) pobiera słownik utworzony przez Django, dodajesz własne klucze, a następnie return zwraca słownik. Szablon otrzymuje to, co zwraca ta metoda.

Zapytanie znajduje się wewnątrz metody, więc jest wykonywane przy każdym żądaniu. Jako atrybut klasy zostałoby wykonane raz, przy uruchomieniu serwera, a liczba nigdy by się nie zmieniła.

challenge icon

Wyzwanie

Łatwy

Szablon strony głównej wyświetla teraz także najnowszą ofertę pracy. Napisz ponownie HomeView:

  • TemplateView dla jobs/home.html, bez metody get().
  • Dodaje do kontekstu count — liczbę ofert pracy — oraz latest — ofertę z najnowszą datą posted.

Naciśnij Run: strona główna wyświetla 12 jobs open i Newest: Python Developer at Brightline.

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Widoki oparte na klasach

Poćwicz samodzielnie: Edytor online Django