📌  相关文章
📜  在 Django 中实现输入字段的搜索自动完成(1)

📅  最后修改于: 2023-12-03 14:50:54.271000             🧑  作者: Mango

在 Django 中实现输入字段的搜索自动完成

在 Django 中,可以使用 jQuery UI Autocomplete 插件来实现输入字段的搜索自动完成。以下是实现过程:

  1. 安装 jQuery UI Autocomplete 插件

首先需要在 html 文件中引入 jQuery 库和 jQuery UI Autocomplete 插件。可以在官方网站或者 cdn 上下载并引入,也可以使用 npm 安装。

<!-- 引入 jQuery 库 -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<!-- 引入 jQuery UI Autocomplete 插件 -->
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.min.css">
<script src="https://cdn.bootcdn.net/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
  1. 定义视图函数

在 Django 中,需要定义一个视图函数来处理搜索请求,并返回符合条件的数据。以下是一个例子:

def search(request):
    if request.method == 'GET':
        q = request.GET.get('q')
        if q:
            data = SomeModel.objects.filter(name__icontains=q)
            results = [obj.name for obj in data]
            return JsonResponse({'results': results})
    return JsonResponse({})

该视图函数接收 GET 请求,并将请求参数中的 q 解析出来作为搜索关键字。然后使用 Django ORM 查询数据,并将查询结果的 name 属性封装成一个列表返回。最后返回一个 JSON 格式的数据,用于前端展示搜索结果。

  1. 编写 JavaScript 代码

在 html 文件中编写 JavaScript 代码,实例化 Autocomplete 插件,并调用 ajax 函数获取搜索结果数据。以下是一个例子:

<script>
$(function() {
  $("#search").autocomplete({
    source: function(request, response) {
      $.ajax({
        url: "{% url 'search' %}",
        data: {
          'q': request.term
        },
        success: function(data) {
          response(data.results)
        }
      })
    }
  })
})
</script>

该代码先选中 id 为 search 的 input 元素,并使用 autocomplete() 函数实例化 Autocomplete 插件。然后设置 source 选项为一个函数,该函数使用 ajax() 函数向视图函数发送 GET 请求,请求参数中包含搜索关键字 q。当查询成功后,将返回的数据的 results 属性作为搜索结果,通过 response() 函数传递给 Autocomplete 插件。

  1. 在 html 文件中添加 input 元素

最后,在 html 文件中添加一个 input 元素,用于输入搜索关键字。需要给该元素设置 id 属性为 search。

<input id="search" type="text" placeholder="输入关键字搜索">

完成上述步骤后,在输入框中输入关键字即可实现搜索自动完成。