חיפוש ספרים
חלק מהיחידה מודלים וממשק הניהול במסלול ה-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="" תואם לכל שורה.
אתגר
קלהוסיפו דף חיפוש. התבנית books/search.html מוכנה ומצפה לקבל את q ואת books.
- תצוגה בשם
searchשקוראת אתqמהכתובת (טקסט ריק כשאין ערך) ומוצאת ספרים שהכותרת שלהם מכילה אותו, ללא תלות באותיות גדולות או קטנות. - הנתיב
search/, ששמוsearch.
לחצו על Run, חפשו dune בכותרת העליונה, ואז פתחו את /search/.
נסו בעצמכם
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})
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מודלים וממשק הניהול
תרגלו בעצמכם: Django אונליין