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

챌린지

쉬움

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

  • event_list.html의 목록 위에 URL에 입력값을 전송하는 양식을 추가하세요. q라는 이름의 입력란과 Search 버튼을 넣으세요.
  • event_list에서 제목에 q가 포함된 이벤트만 대소문자를 구분하지 않고 표시하세요.
  • 검색창에 검색한 내용이 유지되도록 하세요.

Run을 누르고 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 플레이그라운드