Menu
CoddyTech

עמוד לכל ספר

חלק מהיחידה מודלים וממשק הניהול במסלול ה-Django של Coddy. שיעור 14 מתוך 23.

כל ספר צריך דף בכתובת משלו: /books/1/, /books/2/. ממיר נתיב, מתוך Django Basics, לוכד את המספר הזה ומעביר אותו לתצוגה. דף של הספרים משנה אחת:

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})

כל השיעורים ביחידה מודלים וממשק הניהול

תרגלו בעצמכם: Django אונליין