Django用内置方法实现简单搜索功能的方法

下面我来为你详细讲解一下“Django用内置方法实现简单搜索功能的方法”的完整攻略。

1. 创建搜索表单

首先,我们需要创建一个搜索表单,方便用户输入搜索关键字。这个表单一般包括一个输入框和一个搜索按钮。可以借助 Django 的内置 forms 模块来实现。示例代码如下:

from django import forms

class SearchForm(forms.Form):
    keyword = forms.CharField(label='关键字', max_length=100)

这段代码定义了一个名为 SearchForm 的搜索表单,包含一个名为 keyword 的输入框。

2. 创建搜索视图

接下来,我们需要创建一个搜索视图函数,根据用户输入的关键字,从数据库中查询相关数据并返回。可以借助 Django 的内置 ListView 类视图来实现。示例代码如下:

from django.views.generic import ListView
from .models import Article

class SearchView(ListView):
    model = Article
    template_name = 'search.html'
    context_object_name = 'articles'
    paginate_by = 10

    def get_queryset(self):
        keyword = self.request.GET.get('keyword')
        if keyword:
            queryset = Article.objects.filter(title__icontains=keyword)
        else:
            queryset = Article.objects.all()
        return queryset

这段代码定义了一个名为 SearchView 的搜索视图函数,继承自 Django 内置的 ListView 类视图。定义了模型为 Article,视图返回的模板为 search.html,上下文变量名为 articles,每页显示数量为 10。

其中,在 get_queryset 方法中,我们通过 self.request.GET.get('keyword') 获取用户输入的关键字。如果关键字存在,则通过 filter() 方法查询标题中包含该关键字的文章;否则,查询所有文章。

3. 在模板中使用搜索表单和搜索结果

最后,我们需要在模板中使用搜索表单和搜索结果。示例代码如下:

{% extends "base.html" %}

{% block content %}
    <h2>搜索文章</h2>
    <form method="get" action="{% url 'search' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">搜索</button>
    </form>

    {% if articles %}
        <h3>搜索结果</h3>
        {% for article in articles %}
            <div>
                <h4><a href="{% url 'article_detail' article.pk %}">{{ article.title }}</a></h4>
                <p>{{ article.content|truncatewords:30 }}</p>
            </div>
        {% endfor %}
        {% if page_obj.has_previous or page_obj.has_next %}
            <div class="pagination">
                {% if page_obj.has_previous %}
                    <a href="?page={{ page_obj.previous_page_number }}{% if request.GET.keyword %}&keyword={{ request.GET.keyword }}{% endif %}">&laquo; 上一页</a>
                {% endif %}
                <span class="current-page">{{ page_obj.number }}</span>
                {% if page_obj.has_next %}
                    <a href="?page={{ page_obj.next_page_number }}{% if request.GET.keyword %}&keyword={{ request.GET.keyword }}{% endif %}">下一页 &raquo;</a>
                {% endif %}
            </div>
        {% endif %}
    {% else %}
        <p>暂无搜索结果</p>
    {% endif %}
{% endblock %}

这段代码定义了一个名为 search.html 的模板,在模板中通过 form.as_p 将搜索表单渲染出来。在搜索结果部分,通过 articles 变量遍历搜索结果,并显示文章标题和简述。同时,通过内置的分页机制显示分页链接。

以上就是使用 Django 内置方法实现简单搜索功能的完整攻略,其中包含了示例代码和详细的步骤说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django用内置方法实现简单搜索功能的方法 - Python技术站

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

相关文章

  • [TimLinux] django 全局变量在WSGI多进程多线程环境中的研究

    场景1: 2个进程,每个进程1个线程,请求函数中设置了10秒sleep,9个请求同一URL: 结果: 1. 全局变量ID值,在每一个进程中相同,不同进程中不相同 2. 并行只能接受2个请求,同时发起多个请求,则需要排队等待处理   场景2: 1个进程,每个进程2个线程,请求函数中设置了10秒sleep,9个请求同一URL: 结果: 1. 全局变量ID值,在单…

    Django 2023年4月13日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

    2023年4月9日
    00
  • django ORM 一对多, 多对多 查询 以及 结合Tamplate

    ORM 表结构;和管理员是多对多, 和 OS 是一对多 class hosts(models.Model): out_ip=models.CharField(max_length=32) in_ip=models.CharField(max_length=32) app=models.ForeignKey(App) login_user=models.Cha…

    Django 2023年4月9日
    00
  • Django-URL路由配置

    目录 一、URL配置 参数说明 二 、正则表达式详解 注意事项 捕获的参数永远都是字符串: 三、include其他的URLconfs(也叫URL分发) 四、传递额外的参数给视图函数 五、命名URL(别名)和URL的反向解析 六、命名空间模式 一、URL配置   URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用…

    2023年4月10日
    00
  • Django框架—-render函数和redirect函数的区别

    render函数和redirect函数的区别: render:只会返回页面内容,但是未发送第二次请求 redirect:发挥了第二次请求,url更新 具体实例说明 render: redirect:

    Django 2023年4月12日
    00
  • 使用Python的Django框架结合jQuery实现AJAX购物车页面

    使用Python的Django框架结合jQuery实现AJAX购物车页面的攻略如下: 1. 创建Django项目 首先需要在本地创建一个Django项目,可以使用django-admin.py startproject命令或者使用Django官方推荐的工具django-admin startproject工具创建。 2. 编辑模型 在Django中,我们需要…

    Django 2023年5月16日
    00
  • Django使用多数据库的方法

    当我们开发一个大型应用程序时,通常需要使用多个数据库。 Django提供了非常简单的方法来处理多个数据库。在本文中,我们将讨论Django如何使用多个数据库。 1. 定义多个数据库 Django支持定义多个数据库,我们可以通过修改settings.py文件中的DATABASES设置来定义多个数据库。如下所示: DATABASES = { ‘default’:…

    Django 2023年5月16日
    00
  • Django序列化和反序列化

    1)在开发REST接口时,视图中做的最主要的三件事   将请求的数据(如:Json格式)转换为模型类对象(反序列化)  操作数据库  将模型类对象转换为响应的数据(如:Json格式)(序列化)(2)序列化   1)概念     将程序中的一个数据结构类型转化为其它格式(字典、json、XML等)。例如:将django中的模型类对象转换为json字符串,这个转…

    Django 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部