Menu
CoddyTech

DetailView

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

Cada trabalho precisa de sua própria página: encontre a linha, mostre-a e responda com 404 quando não houver nenhuma. Isso é DetailView. Em um site de receitas:

class RecipeDetailView(DetailView):
    model = Recipe


# urls.py
path("recipes/<int:pk>/", views.RecipeDetailView.as_view(), name="recipe")

Uma DetailView lê a chave primária da linha do argumento da URL chamado pk e procura a linha da mesma forma que get_object_or_404(). Seu template padrão é recipes/recipe_detail.html, e a linha chega como object e como recipe.

O nome pk é importante. Uma rota escrita como <int:id> fornece à view um argumento que ela não procura, e a página trava com um AttributeError pedindo um pk de objeto ou um slug.

Um link passa o pk da linha para o nome da rota: {% url 'recipes:recipe' recipe.pk %}.

challenge icon

Desafio

Fácil

O template jobs/job_detail.html está pronto. Crie uma página própria para cada vaga:

  • Em jobs/views.py, uma JobDetailView, uma DetailView de Job.
  • Em jobs/urls.py, uma rota "jobs/<int:pk>/" chamada detail.
  • Em job_list.html, transforme o título de cada vaga em um link para sua página.

Clique em Run, abra /jobs/ e clique em um título.

Experimente você mesmo

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


class JobListView(ListView):
    model = Job
    context_object_name = "jobs"
    ordering = ["-posted"]
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Views baseadas em classes

Pratique por conta própria: Playground de Django