Menu
CoddyTech

DetailView

Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 5 dari 18.

Setiap pekerjaan memerlukan halamannya sendiri: temukan pekerjaannya, tampilkan, dan berikan respons 404 Page not found jika pekerjaan tersebut tidak ada. Itulah DetailView. Di situs resep:

class RecipeDetailView(DetailView):
    model = Recipe


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

DetailView membaca kunci utama baris dari argumen URL bernama pk dan mencari baris tersebut seperti yang dilakukan get_object_or_404(). Templat defaultnya adalah recipes/recipe_detail.html, dan baris tersebut tersedia sebagai object dan recipe.

Nama pk penting. Rute yang ditulis <int:id> memberikan argumen yang tidak dicari oleh view, sehingga halaman mengalami crash dengan AttributeError yang meminta pk object atau slug.

Tautan meneruskan pk baris ke nama rute: {% url 'recipes:recipe' recipe.pk %}.

challenge icon

Tantangan

Mudah

Berikan setiap pekerjaan halamannya sendiri dengan templat siap pakai jobs/job_detail.html.

  1. Di jobs/views.py, tambahkan JobDetailView, sebuah DetailView untuk Job.
  2. Di jobs/urls.py, tambahkan rute "jobs/<int:pk>/" bernama detail.
  3. Di job_list.html, jadikan judul setiap pekerjaan tautan ke halamannya.

Klik Python Developer untuk membuka halamannya, lalu buka /jobs/999/: kamu akan melihat 404 Page not found.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di View Berbasis Class

Latihan sendiri: Playground Django