البحث عن الكتب
جزء من قسم النماذج ولوحة الإدارة في رحلة 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.
- في
books/views.py، اكتب عرضًا باسمsearchيقرأqمن العنوان (نصًا فارغًا إذا لم يكن موجودًا) ويعثر على الكتب التي يحتوي عنوانها عليه، بصرف النظر عن حالة الأحرف. - في
books/urls.py، أضف المسارsearch/وسمّهsearch.
اضغط «العب» وابحث عن dune في الترويسة: تعرض نتائج البحث عن "dune" كتاب Dune، ويُظهر xyz عبارة «لا توجد كتب مطابقة».
جرّب بنفسك
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})
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس النماذج ولوحة الإدارة
تدرّب بنفسك: Playground لـ Django