ListView
Parte de la sección Vistas basadas en clases del Journey de Django de Coddy. Lección 4 de 18.
El consejo necesita una página que muestre todos los trabajos. Una lista de las filas de una tabla es tan común que Django ya escribió la vista: ListView. Dale un modelo y consultará las filas y las mostrará en una plantilla. La lista de un sitio de recetas, en la aplicación recipes:
from django.views.generic import ListView
class RecipeListView(ListView):
model = Recipe
context_object_name = "recipes" # {% for recipe in recipes %}
ordering = ["minutes"] # los más rápidos primeroSi no se especifica template_name, se muestra recipes/recipe_list.html: la etiqueta de la aplicación, el nombre del modelo en minúsculas y luego _list.html. La plantilla siempre recibe las filas como object_list. También las recibe como recipe_list o, si estableces context_object_name, con ese nombre.
ordering acepta lo mismo que order_by(), así que ["-minutes"] pondría primero la receta que tarda más. Si no se especifica, las filas aparecen en el orden de la base de datos.
Desafío
FácilAñade la página de empleos con la plantilla lista jobs/job_list.html, que recorre jobs.
- En
jobs/views.py, añadeJobListView, unaListViewdeJob. Llamajobsa su lista, coloca primero la fechapostedmás reciente y conserva la plantilla predeterminada. - En
jobs/urls.py, añade la ruta"jobs/"con el nombrelist.
Abre /jobs/: Python Developer aparece primero y Technical Writer, al final.
Pruébalo tú mismo
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"
Todas las lecciones de Vistas basadas en clases
Practica por tu cuenta: Playground de Django