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

yizhihongxing

下面我来为你详细讲解一下“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日

相关文章

  • 通用的Django注册功能模块实现方法

    下面我将为你介绍如何实现通用的Django注册功能模块。总的来说,这个功能模块包含以下几个步骤: 创建一个注册页面,允许用户输入用户名、邮箱和密码。 将用户输入的信息添加到数据库中。 发送激活邮件给用户,要求用户点击链接进行账户激活。 下面是实现步骤的具体细节。 1. 创建注册页面 在Django中,可以使用内置的表单(Form)功能来创建注册页面。首先,创…

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

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

    Django 2023年4月12日
    00
  • Django框架的理解和使用的常见问题

    1、什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。 中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。 如请求过来 执行process_request, view,…

    Django 2023年4月10日
    00
  • django HttpResponse的用法

    一、传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http import JsonResponse back_msg = {‘name’:name,’age’:123} return JsonResponse(back_ms…

    Django 2023年4月12日
    00
  • django 的 MTV 流程图

         

    Django 2023年4月12日
    00
  • Django项目部署搭建uWSGI工作环境

    安装uWSGI 在Linux系统中,可以使用以下命令安装uWSGI: sudo apt-get update sudo apt-get install build-essential python3-dev sudo pip3 install uwsgi 创建Django项目 使用Django创建一个新项目: django-admin startprojec…

    Django 2023年3月13日
    00
  • Django 序列化三种方式 对象 列表 元组

    1.xuliehua.html <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title</title> </head> <body> <h1>用户列表</h1> <table id=…

    Django 2023年4月9日
    00
  • Django url标签详解

    Django中提供了一个url标签,它可以用于生成URL,这对于模板中的链接很有用。url标签可以帮助我们在模板中对应用程序中的视图进行链接,因此我们可以展示数据无需手动构建URL。 url语法: {% url 'url_name' arg1 arg2 … %} url_name: URLconf中定义的名称(或视图)。 arg1, …

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