Menu
CoddyTech

ListView

Parte da seção Views baseadas em classes do Journey de Django da Coddy. Lição 4 de 18.

O quadro precisa de uma página que liste todos os trabalhos. Uma lista das linhas de uma tabela é tão comum que o Django criou a view: ListView. Informe um modelo, e ela consulta as linhas e as renderiza em um template. A lista de um site de receitas, no app recipes:

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # mais rápidas primeiro

Sem template_name, ela renderiza recipes/recipe_list.html: o rótulo do app, o nome do modelo em letras minúsculas e, depois, _list.html. O template sempre recebe as linhas como object_list. Também as recebe como recipe_list ou, quando você define context_object_name, com esse nome.

ordering aceita o mesmo que order_by(), então ["-minutes"] colocaria a receita mais demorada primeiro. Sem ele, as linhas vêm na ordem do banco de dados.

challenge icon

Desafio

Fácil

Adicione a página de vagas, com o modelo pronto jobs/job_list.html, que percorre jobs.

  1. Em jobs/views.py, adicione JobListView, uma ListView de Job. Dê à lista o nome jobs, coloque primeiro a data posted mais recente e mantenha o modelo padrão.
  2. Em jobs/urls.py, adicione a rota "jobs/" com o nome list.

Acesse /jobs/: Python Developer aparece primeiro e Technical Writer aparece por último.

Experimente você mesmo

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 as lições de Views baseadas em classes

Pratique por conta própria: Playground de Django