Menu
CoddyTech

ListView

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

Al consiglio serve una pagina che elenchi tutti i lavori. Un elenco delle righe di una tabella è così comune che Django ha scritto la vista: ListView. Passale un modello e interrogherà le righe, quindi le visualizzerà in un modello. L'elenco di un sito di ricette, nell'app recipes:

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # prima le più veloci

Se non specifichi template_name, visualizza recipes/recipe_list.html: l'etichetta dell'app, il nome del modello in minuscolo, poi _list.html. Il modello riceve sempre le righe come object_list. Le riceve anche come recipe_list oppure, se imposti context_object_name, con quel nome.

ordering accetta ciò che accetta order_by(), quindi ["-minutes"] metterebbe per prima la ricetta con il tempo di preparazione più lungo. Senza questa opzione, le righe sono restituite nell'ordine del database.

challenge icon

Sfida

Facile

Aggiungi la pagina degli annunci di lavoro, usando il template già pronto jobs/job_list.html, che esegue un ciclo su jobs.

  1. In jobs/views.py, aggiungi JobListView, una ListView di Job. Assegna alla lista il nome jobs, mostra per prima la data posted più recente e mantieni il template predefinito.
  2. In jobs/urls.py, aggiungi la route "jobs/" con il nome list.

Apri /jobs/: Python Developer è il primo e Technical Writer è l'ultimo.

Provalo tu

from django.views.generic import 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"

Tutte le lezioni di View basate su classi

Esercitati da solo: Playground Django