搜索表单
本课属于 Coddy Django 学习旅程的“表单”单元。第 1 课,共 20 课。
访客还不能搜索活动公告板。表单由一组字段和一个按钮组成,用于将输入的内容发送到某个 URL。
只读取数据的表单使用 method="get":浏览器会将每个字段放入 URL 的查询字符串中,格式为 name=value。下面是商店页面上的尺码筛选器:
<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中的<ul class="events">上方,添加一个method="get"的表单,其中包含一个名为q的输入框和一个Search按钮。 - 在
event_list中,保留标题包含q的活动,不区分大小写。 - 将
q传给模板,作为输入框的value,这样搜索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 在线编辑器