Menu
CoddyTech

検索フォーム

CoddyのDjangoジャーニー「フォーム」セクションの一部。レッスン 1/20。

訪問者はまだイベント掲示板を検索できません。フォームとは、入力欄とボタンのセットで、入力された内容を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を含むイベントだけを表示します。
  • 検索ボックスには、検索した内容が保持されます。

「実行」を押して、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プレイグラウンド