Menu
CoddyTech

חיפוש ספרים

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

המדף שלך זקוק לתיבת חיפוש. דף חיפוש קורא מהכתובת את מה שהמבקר הקליד. ב־/search/?q=dune, החלק שאחרי ? הוא מחרוזת השאילתה, ו־Django מכניסה את הזוגות שלה ל־request.GET, שפועל כמו מילון. תיבת החיפוש שבכותרת היא טופס שבונה עבורך את הכתובת הזאת; יחידת הטפסים עוסקת בטפסים. דף לז'אנר אחד יכול לקרוא אותה כך:

def by_genre(request):
    genre = request.GET.get("genre", "fiction")
    books = Book.objects.filter(genre=genre)
    return render(request, "books/genre.html", {"genre": genre, "books": books})

.get("genre", "fiction") מחזירה את ברירת המחדל כשאין בכתובת genre;‏ request.GET["genre"] הייתה מעלה שם שגיאה, שגיאת 500. הערכים הם תמיד טקסט: ?page=2 נותן "2". כל כותרת מכילה את המחרוזת הריקה "", לכן __icontains="" תואם לכל שורה.

challenge icon

אתגר

קל

הוסיפו דף חיפוש. התבנית books/search.html מוכנה ומצפה ל־q ול־books.

  1. ב־books/views.py, כתבו תצוגה בשם search שקוראת את q מכתובת האתר (טקסט ריק אם הוא חסר) ומוצאת את הספרים שהכותרת שלהם מכילה אותו, ללא תלות באותיות גדולות או קטנות.
  2. ב־books/urls.py, הוסיפו את הנתיב search/, בשם search.

לחצו על "שחק" וחפשו dune בכותרת: Search results for "dune" מציג את Dune, ו־xyz מציג No books match.

נסו בעצמכם

from django.shortcuts import get_object_or_404, render

from .models import Book


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


def book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk)
    return render(request, "books/book_detail.html", {"book": book})
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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