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 %}.
Desafio
FácilO template jobs/job_detail.html está pronto. Crie uma página própria para cada vaga:
- Em
jobs/views.py, umaJobDetailView, umaDetailViewdeJob. - Em
jobs/urls.py, uma rota"jobs/<int:pk>/"chamadadetail. - 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"]
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