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 renderiza um template com elas. 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, em seguida, _list.html. As linhas chegam como object_list e recipe_list, ou com o nome definido em context_object_name.

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. Seu modelo, jobs/job_list.html, está pronto e percorre jobs.

  • Em jobs/views.py, uma JobListView, uma ListView de Job, com a lista chamada jobs e a data mais recente de posted primeiro. Mantenha o modelo padrão.
  • Em jobs/urls.py, uma rota "jobs/" chamada list.

Pressione Executar e abra /jobs/.

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