Django实现jquery select2带搜索的下拉框

要实现一个带搜索的下拉框,需要用到Django作为后端框架,同时引入JQuery和Select2插件。下面是详细的步骤:

1. 安装依赖

首先,需要安装以下依赖:

  • Django
  • JQuery
  • Select2

JS和CSS文件可以从官网下载,也可以使用CDN。

2. 定义模型

接下来,需要定义一个模型类,以便在前端显示下拉框列表。例如,若要创建一个学生模型类:

class Student(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

3. 定义视图和模板

在视图中,需要将模型的数据传递到前端。具体实现可分为以下步骤:

  • 查询模型的数据,并将其转换为JSON格式(通过json.dumps()实现)。
def student_list(request):
    students = Student.objects.all()
    students_json = json.dumps([ {'id': s.pk, 'text': s.name} for s in students ])

    return render(request, 'student_list.html', {'students_json': students_json})
  • 在模板中,需要引入JQuery、Select2的JS和CSS文件。另外,需要创建一个带有class属性为select2_demo<select>元素,并在其中嵌套一个<option>元素。在<script></script>标签中,初始化Select2插件,并指定Ajax的URL和数据格式。
{% block content %}
    <link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>

    <h1>Student List</h1>

    <select class="select2_demo" style="width: 500px;">
      <option value="1">Loading data...</option>
    </select>

    <script type="text/javascript">
        $(document).ready(function() {
            $('.select2_demo').select2({
                placeholder: 'Select a student',
                ajax: {
                    url: '/search_students/',
                    dataType: 'json',
                    data: function (params) {
                        return {
                            query: params.term,
                        };
                    },
                    processResults: function (data) {
                        return {
                            results: $.map(data, function (item) {
                                return {
                                    id: item.id,
                                    text: item.name,
                                };
                            })
                        };
                    },
                    cache: true
                }
            });
        });
    </script>
{% endblock %}

在模板中,可以通过{{ students_json }}来获取后端返回的数据。

4. 定义URL路由

在urls.py中,需要定义一个路由,将/search_students/与视图student_list相对应。

url(r'^search_students/$', views.student_list, name='search_students'),

至此,一个带有搜索的下拉框就实现了。下面是2个示例:

示例1:基于数据库查询

这个示例假设有一个用户模型类,用户可以根据姓名、邮箱或ID进行搜索。可以使用Q对象来连接搜索条件。例如:

def search_users(request):
    query = request.GET.get('query', '')
    users = User.objects.filter(Q(username__icontains=query) | Q(email__icontains=query) | Q(id__icontains=query))
    users_json = json.dumps([ {'id': u.pk, 'text': u.username} for u in users ])

    return HttpResponse(users_json, content_type='application/json')

Q对象中,icontains表示不区分大小写,并使用“%”通配符来匹配任意字符。

示例2:基于API查询

这个示例假设有一个API可以接受任意关键字进行搜索。可以使用Python的requests库来发送HTTP请求,然后解析返回的JSON数据。例如:

def search_books(request):
    query = request.GET.get('query', '')
    url = 'https://api.douban.com/v2/book/search?q={}'.format(query)
    response = requests.get(url)
    books = response.json()['books']
    books_json = json.dumps([ {'id': b['id'], 'text': b['title']} for b in books ])

    return HttpResponse(books_json, content_type='application/json')

requests.get()中,url参数表示要请求的API的URL。调用response.json()方法将返回的JSON数据转换为Python对象,然后使用列表推导式将列表转换为JSON格式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现jquery select2带搜索的下拉框 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • MySQL全文索引实现简单版搜索引擎实例代码

    下面就针对“MySQL全文索引实现简单版搜索引擎实例代码”的完整攻略进行详细讲解。 什么是MySQL全文索引 MySQL全文索引是MySQL数据库的一项功能,它通过将文本数据分解成词(Token),将每个词与其出现的行关联起来,以便使用这些词进行搜索。全文索引是一项高效的技术,可以帮助我们实现全文检索的功能。 使用MySQL全文索引需要满足以下条件: MyS…

    人工智能概论 2023年5月25日
    00
  • Django模板中变量的运算实现

    Django是一个使用Python语言的Web应用程序框架,模板是使用Django编写Web应用程序的一部分。在Django模板中,变量的运算可以用来实现一些功能,比如计算变量之间的值、格式化日期时间等。下面将详细讲解Django模板中变量的运算实现的完整攻略。 1. 变量的运算基础 变量的运算在Django模板中通常使用{{}}语法表示。在运算中,常用的运…

    人工智能概论 2023年5月25日
    00
  • 详细记一次Docker部署服务的爬坑历程

    详细记一次Docker部署服务的爬坑历程 概述 Docker是一种轻量级的虚拟化技术,可以将应用程序和其所需的依赖项打包到一个容器中,以便可以在任何地方运行。Docker部署服务比传统方式更加灵活和方便,但如果不注意一些要点就有可能遇到一些问题。在这篇文章中,我们将会分享如何在Docker中部署服务时的一些注意事项和一些可能会遇到的问题以及如何解决这些问题。…

    人工智能概览 2023年5月25日
    00
  • 在Nginx中增加对OAuth协议的支持的教程

    Nginx是一款高性能、开源的Web服务器,广泛应用于互联网领域。为了提高Nginx的安全性,可以增加对OAuth协议的支持,以验证用户的身份。下面是增加对OAuth协议的支持的教程: 1. 安装Nginx 首先需要安装Nginx,可以参考官方文档进行安装。 2. 安装OAuth模块 Nginx的OAuth模块是由第三方提供的,需要先安装此模块。 wget …

    人工智能概览 2023年5月25日
    00
  • 易语言通过百度ocr接口识别图片记录微信转账金额的代码

    下面我将详细讲解“易语言通过百度ocr接口识别图片记录微信转账金额的代码”的完整攻略。 百度OCR接口首先需要去百度AI开放平台注册账号,创建应用并申请OCR识别接口的使用权限。获取到百度OCR接口的API Key和Secret Key后,就可以在易语言程序中调用百度OCR接口进行图片的识别。 代码编写 ; 设置请求方式 Http_DefaultReques…

    人工智能概论 2023年5月25日
    00
  • 通过Python 接口使用OpenCV的方法

    以下是通过Python接口使用OpenCV的方法的完整攻略: 准备工作 在使用Python接口使用OpenCV之前,需要确保已经安装并配置好了以下环境: Python 3.x OpenCV 3.x或4.x numpy 导入OpenCV模块 在Python代码中,需要先导入OpenCV模块: import cv2 加载图片 使用OpenCV中提供的cv2.im…

    人工智能概览 2023年5月25日
    00
  • 使用apt-mirror搭建Ubuntu软件源的实例教程

    下面是使用apt-mirror搭建Ubuntu软件源的实例教程,具体步骤如下: 一、环境准备 操作系统:Ubuntu 18.04 LTS; 安装apt-mirror:在终端中执行sudo apt-get install apt-mirror进行安装。 二、配置apt-mirror 打开源列表文件,执行命令sudo vim /etc/apt/mirror.li…

    人工智能概论 2023年5月24日
    00
  • 基于OpenCV与JVM实现矩阵处理图像

    基于OpenCV与JVM实现矩阵处理图像 简介 OpenCV是一个开源计算机视觉库,可用于处理图像和视频。而JVM是Java虚拟机的缩写,Java虚拟机能够在不同的操作系统上运行Java代码。本文将介绍如何在Java平台上使用OpenCV库来实现矩阵处理图像。 步骤 第一步:在Java项目中引入OpenCV库 在Java项目中,可以直接将OpenCV库导入,…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部