📅  最后修改于: 2023-12-03 14:50:54.271000             🧑  作者: Mango
在 Django 中,可以使用 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>
在 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 格式的数据,用于前端展示搜索结果。
在 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 插件。
最后,在 html 文件中添加一个 input 元素,用于输入搜索关键字。需要给该元素设置 id 属性为 search。
<input id="search" type="text" placeholder="输入关键字搜索">
完成上述步骤后,在输入框中输入关键字即可实现搜索自动完成。