検索フォーム
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に書き込みます。
チャレンジ
簡単ホームページに検索機能を追加します。
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プレイグラウンド