Menu
CoddyTech

搜索表单

本课属于 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。

challenge icon

挑战

简单

在主页添加搜索功能。

  1. 在 event_list.html 中的 <ul class="events"> 上方,添加一个 method="get" 的表单,其中包含一个名为 q 的输入框和一个 Search 按钮。
  2. 在 event_list 中,保留标题包含 q 的活动,不区分大小写。
  3. 将 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 在线编辑器