Menu
CoddyTech

책 검색하기

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=""는 모든 행과 일치합니다.

challenge icon

챌린지

쉬움

검색 페이지를 추가하세요. books/search.html 템플릿은 준비되어 있으며 q와 books를 필요로 합니다.

  1. books/views.py에 주소에서 q를 읽고(없으면 빈 문자열 사용) 대소문자에 관계없이 제목에 해당 내용이 포함된 책을 찾는 뷰 search를 작성하세요.
  2. books/urls.py에 search/ 경로를 추가하고 이름을 search로 지정하세요.

‘플레이’를 누르고 헤더에서 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})
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

모델과 관리자의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드