Menu
CoddyTech

DetailView

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

Setiap pekerjaan membutuhkan halamannya sendiri: temukan barisnya, tampilkan, dan berikan jawaban 404 jika 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 primary key baris dari argumen URL bernama pk dan mencari baris tersebut seperti yang dilakukan get_object_or_404(). Template default-nya 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 object pk atau slug.

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

challenge icon

Tantangan

Mudah

Template jobs/job_detail.html sudah siap. Buat halaman tersendiri untuk setiap pekerjaan:

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

Tekan Jalankan, buka /jobs/, lalu klik sebuah judul.

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