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ù velociSe 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.
Sfida
FacileAggiungi la pagina degli annunci di lavoro, usando il template già pronto jobs/job_list.html, che esegue un ciclo su jobs.
- In
jobs/views.py, aggiungiJobListView, unaListViewdiJob. Assegna alla lista il nomejobs, mostra per prima la datapostedpiù recente e mantieni il template predefinito. - In
jobs/urls.py, aggiungi la route"jobs/"con il nomelist.
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