Tìm kiếm sách
Thuộc phần Model và trang quản trị trong hành trình Django của Coddy. Bài học 15 trên 23.
Kệ sách của bạn cần một ô tìm kiếm. Trang tìm kiếm đọc nội dung khách truy cập nhập từ địa chỉ. Trong /search/?q=dune, phần sau ? là chuỗi truy vấn, còn Django đặt các cặp của chuỗi này vào request.GET, hoạt động giống như một từ điển. Ô tìm kiếm ở đầu trang là một biểu mẫu giúp bạn tạo địa chỉ này; phần Biểu mẫu sẽ trình bày về biểu mẫu. Trang hiển thị một thể loại có thể đọc nội dung này như sau:
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") trả về giá trị mặc định khi địa chỉ không có genre; nếu không, request.GET["genre"] sẽ gây ra lỗi 500. Giá trị luôn là văn bản: ?page=2 cho kết quả "2". Mọi tiêu đề đều chứa chuỗi rỗng "", vì vậy __icontains="" khớp với mọi hàng.
Thử thách
DễThêm một trang tìm kiếm. Mẫu books/search.html đã sẵn sàng và cần q cùng books.
- Trong
books/views.py, viết một khung nhìnsearchđể đọcqtừ địa chỉ (nếu thiếu thì dùng văn bản rỗng) và tìm những cuốn sách có tiêu đề chứa nội dung đó, không phân biệt chữ hoa chữ thường. - Trong
books/urls.py, thêm đường dẫnsearch/với tênsearch.
Nhấn Chạy rồi tìm dune trong thanh đầu trang: Search results for "dune" liệt kê Dune, còn xyz hiển thị No books match.
Tự làm thử
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})
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Model và trang quản trị
Tự luyện tập: Playground Django