Menu
CoddyTech

صفحة لكل كتاب

جزء من قسم النماذج ولوحة الإدارة في رحلة Django على Coddy. الدرس 14 من 23.

يحتاج كل كتاب إلى صفحة على عنوانه الخاص: /books/1/، /books/2/. يلتقط محوّل المسار، من أساسيات Django، هذا الرقم ويمرّره إلى العرض. صفحة للكتب من سنة واحدة:

path("years/<int:year>/", views.books_of_year, name="books_of_year"),

def books_of_year(request, year):
    books = Book.objects.filter(year=year)
    return render(request, "books/year.html", {"year": year, "books": books})

تُسمّي صفحة الصف الواحد هذا الصف بمفتاحه الأساسي، pk: أي id الخاص به. يؤدي استدعاء get() عند عدم وجود الصف إلى رفع استثناء، والاستثناء في العرض يعني حدوث عطل، خطأ الخادم 500. أما get_object_or_404() من django.shortcuts فيستجيب بـ404 الصفحة غير موجودة بدلًا من ذلك. يأخذ النموذج أولًا، ثم الشروط: get_object_or_404(Book, title="Emma").

للربط بمسار يلتقط قيمة، ضع القيمة بعد الاسم: {% url 'books:books_of_year' book.year %}.

challenge icon

التحدي

متوسط

امنح كل كتاب صفحة. القالب books/book_detail.html جاهز ويتوقع book.

  1. في books/views.py، اكتب book_detail(request, pk): يعرض الكتاب الذي يحمل هذا المعرّف، أو يستجيب برمز 404.
  2. في books/urls.py، وجّه /books/<id>/، للأرقام فقط، إليه باسم book_detail.
  3. في home.html، اربط كل عنوان بصفحته. العنوان وحده هو الرابط: <a ...>Dune</a> (1965).

انقر على Dune في الصفحة الرئيسية، ثم افتح /books/999/: الصفحة غير موجودة (404).

جرّب بنفسك

from django.shortcuts import render

from .models import Book


def home(request):
    books = Book.objects.all()
    return render(request, "books/home.html", {"books": books})

جميع دروس النماذج ولوحة الإدارة

تدرّب بنفسك: Playground لـ Django