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

yizhihongxing

要实现一个带搜索的下拉框,需要用到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日

相关文章

  • Epson(1640XL)扫描仪软故障一例-Epson Scan无法启动

    针对“Epson(1640XL)扫描仪软故障一例-Epson Scan无法启动”这个问题,我们可以采取以下步骤来进行解决: 1. 清理Epson Scan软件及相关驱动程序 首先,我们需要彻底删除Epson Scan软件以及相关的驱动程序。具体步骤如下: 打开控制面板,点击“程序和功能”,在程序列表中找到Epson Scan及相关驱动程序,选择卸载。 在卸载…

    人工智能概览 2023年5月25日
    00
  • Jenkins系统如何进行数据备份

    Jenkins是一个非常流行的CI/CD工具,用于构建、测试和部署软件项目。在使用Jenkins时,重要的数据是必须保护的。因此,备份Jenkins数据是非常必要的。下面是Jenkins系统如何进行数据备份的完整攻略: 1. 确定备份策略 在备份Jenkins数据之前,您需要确定备份策略。备份策略是指如何备份Jenkins数据、备份的频率以及备份存储位置等相…

    人工智能概览 2023年5月25日
    00
  • centos7系统下nginx安装并配置开机自启动操作

    以下是详细讲解“CentOS 7系统下Nginx安装并配置开机自启动操作”的完整攻略。 安装Nginx 安装EPEL源: bash sudo yum install epel-release 安装Nginx: bash sudo yum install nginx 启动Nginx: bash sudo systemctl start nginx (可选)设置…

    人工智能概览 2023年5月25日
    00
  • Python read函数按字节(字符)读取文件的实现

    Python中的read()函数是用于读取文件的函数之一,其默认读取整个文件,并将文件内容以字符串的方式返回。但是在需要读取大文件时,如果使用默认设置,则会导致内存溢出等问题。为了避免这种情况,我们可以使用read()函数按字节(字符)读取文件的方式,即每次只读取一定数量的字符,直到读取完整个文件。 下面是read()函数按字节(字符)读取文件的实现攻略: …

    人工智能概览 2023年5月26日
    00
  • Django+Uwsgi+Nginx如何实现生产环境部署

    Django+Uwsgi+Nginx是一种常见的生产环境部署方式,下面将详细讲解如何实现该部署方式。 一、安装必要的软件 部署Django应用,通常需要安装以下软件: Nginx:Web服务器,负责处理HTTP/HTTPS请求; uWSGI:Web服务器网关接口,将Web服务器与应用程序连接起来; Supervisor:进程管理器,用于管理uWSGI及Dja…

    人工智能概论 2023年5月25日
    00
  • TensorFlow 输出checkpoint 中的变量名与变量值方式

    TensorFlow 可以把某个时间点的模型保存到 checkpoint 文件。可以使用 TensorBoard 来可视化 checkpoint,或者通过 TensorFlow API 以编程方式获取 checkpoint 中变量的值。下面分步骤详细讲解 TensorFlow checkpoint 输出变量名和变量值的方式。 1. TensorFlow ch…

    人工智能概论 2023年5月24日
    00
  • 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门

    零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门 本文将介绍如何搭建一个基于 Node.js、Express、Ejs、Mongodb 的服务器,以及如何开发应用。如果您还没有 Node.js 的基础,可以先学习一下,并确保已经在您的计算机上安装了 Node.js 环境。 安装 安装 Node.js 以及 npm。可以在 N…

    人工智能概论 2023年5月25日
    00
  • django主动抛出403异常的方法详解

    Django主动抛出403异常的方法详解 在有些情况下,Django开发者需要手动触发403异常,以便在特定情形下让用户无法继续访问某些页面或资源。本文将详细讲解Django主动抛出403异常的方法。 在视图函数中主动抛出403异常 在Django的视图函数中,可以使用raise PermissionDenied语句来主动抛出403异常,示例如下: from…

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