صفحة لكل كتاب
جزء من قسم النماذج ولوحة الإدارة في رحلة 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 %}.
التحدي
متوسطامنح كل كتاب صفحة. القالب books/book_detail.html جاهز ويتوقع book.
- عرض
book_detail(request, pk). إذا لم يكن للمعرّف كتاب، فستكون الاستجابة 404. - مسار لـ
/books/<id>/باسمbook_detail، يطابق الأرقام فقط. - في الصفحة الرئيسية، يرتبط عنوان كل كتاب بصفحته.
اضغط على Run، ثم انقر عنوانًا، ثم افتح /books/999/.
جرّب بنفسك
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