책 검색하기
Coddy Django 여정의 모델과 관리자 섹션에 포함된 레슨. 23개 중 15번째.
서재에 검색 상자가 필요합니다. 검색 페이지는 방문자가 주소에 입력한 내용을 읽습니다. /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를 사용합니다.
- 주소에서
q를 읽고(없는 경우 빈 텍스트) 대소문자에 관계없이 제목에 해당 내용이 포함된 책을 찾는 뷰search. search라는 이름의 경로search/.
실행을 누르고, 헤더에서 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 플레이그라운드