Menu
CoddyTech

검색 폼

Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 1번째.

방문자는 아직 이벤트 게시판을 검색할 수 없습니다. 양식은 입력란과 버튼으로 이루어져 있으며, 입력한 내용을 URL로 전송합니다.

데이터를 읽기만 하는 양식은 method="get"을 사용합니다. 브라우저는 각 입력란의 값을 name=value 형식으로 URL의 쿼리 문자열에 넣습니다. 상점 페이지의 크기 필터는 다음과 같습니다.

<form method="get">
    <select name="size">
        <option value="S">Small</option>
        <option value="L">Large</option>
    </select>
    <button type="submit">Show</button>
</form>

Large를 선택하면 /products/?size=L이 열립니다. 입력란의 name이 키이므로, 뷰는 일반 쿼리 문자열을 읽을 때처럼 request.GET.get("size", "")로 값을 읽으며, 기본 페이지에는 기본값을 지정합니다.

검색하면 페이지가 새로고침되고 입력란은 다시 비워집니다. 입력한 단어를 유지하려면 템플릿에 다시 전달한 다음 입력란의 value에 넣으세요.

challenge icon

챌린지

쉬움

홈 페이지에 검색 기능을 추가하세요.

  1. event_list.html에서 <ul class="events"> 위에 method="get"인 폼을 추가하고, q라는 이름의 입력란과 Search 버튼을 넣으세요.
  2. event_list에서 대소문자를 구분하지 않고 제목에 q가 포함된 이벤트만 남기세요.
  3. 입력란의 value에 사용할 q를 템플릿에 전달하여, Meetup을 검색해도 입력란에 그대로 표시되도록 하세요.

jazz를 검색하면 Friday Jazz Night만 남고 입력란에도 jazz가 그대로 표시됩니다.

직접 해보기

from django.shortcuts import get_object_or_404, render

from .models import Event


def event_list(request):
    events = Event.objects.all()
    return render(request, "events/event_list.html", {"events": events})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})

폼의 모든 레슨

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