Menu
CoddyTech

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.

challenge icon

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.

  1. Trong books/views.py, viết một khung nhìn search để đọc q từ đị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.
  2. Trong books/urls.py, thêm đường dẫn search/ với tên search.

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})
quiz iconTự kiểm tra

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