Menu
CoddyTech

Añadir al contexto

Parte de la sección Vistas basadas en clases del Journey de Django de Coddy. Lección 3 de 18.

La página de inicio también podría ser una TemplateView, salvo que su plantilla necesita datos. Las variables que recibe una plantilla son su contexto, y una vista genérica las crea en un método, get_context_data(). Sobrescríbelo para añadir las tuyas. Un sitio de recetas cuenta sus recetas rápidas:

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

Tres pasos, siempre iguales: super().get_context_data(**kwargs) obtiene el diccionario que creó Django, tú añades tus claves y, después, return el diccionario. La plantilla recibe lo que devuelva este método.

La consulta está dentro del método, así que se ejecuta en cada solicitud. Como atributo de clase, se ejecutaría una sola vez, cuando se inicia el servidor, y el número nunca cambiaría.

challenge icon

Desafío

Fácil

La plantilla de inicio ahora también muestra el empleo más reciente. Reescribe HomeView:

  • Una TemplateView para jobs/home.html, sin get().
  • Añade count, el número de empleos, y latest, el empleo con la fecha posted más reciente, al contexto.

Pulsa Run: la página de inicio muestra 12 jobs open y Newest: Python Developer at Brightline.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Vistas basadas en clases

Practica por tu cuenta: Playground de Django