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日

相关文章

  • django rest framework 实现用户登录认证详解

    下面我就为您详细讲解“django rest framework 实现用户登录认证详解”的完整攻略,包含两条示例说明。 一、什么是Django Rest Framework Django Rest Framework是一个快速而灵活的Web框架,用于构建API。它使用了 Django 的优点,例如轻松的数据库管理、简单的URL路由、强大的视图和模板引擎,并将…

    Django 2023年5月16日
    00
  • django基础知识之GET属性:

    QueryDict类型的对象 包含get请求方式的所有参数 与url请求地址中的参数对应,位于?后面 参数的格式是键值对,如key1=value1 多个参数之间,使用&连接,如key1=value1&key2=value2 键是开发人员定下来的,值是可变的 示例如下 创建视图getTest1用于定义链接,getTest2用于接收一键一值,ge…

    Django 2023年4月12日
    00
  • Django-权限信息初始化

    数据库 from django.db import models class Menu(models.Model): “”” 菜单组: “”” title = models.CharField(max_length=32) def __str__(self): return self.title class Group(models.Model): “”” …

    Django 2023年4月16日
    00
  • Django进阶

    一:用户信息扩展 1.可以采用用户关联的方式进行扩展 2.可以采用继承的方式进行扩展 都需要在admin中进行设定,显示需要显示的内容 Django之HttpRequest和HttpResponse 二:自定义认证方式只不过是自己在view当中写login函数罢了user.check_password()user.has_perm三:权限的设计使用2.1 P…

    2023年4月12日
    00
  • 对django中foreignkey的简单使用详解

    对Django中ForeignKey的简单使用详解 ForeignKey的作用 在Django的ORM中,ForeignKey是用来建立模型之间关系的一种字段类型。其作用是将一个模型与其他一个模型关联起来。 例如,在一个图书管理系统中,每一本书都是从一个出版社出版的,我们就可以在书的模型中使用ForeignKey关联出版社的模型。 ForeignKey的用法…

    Django 2023年5月16日
    00
  • 用pycharm开发django项目示例代码

    下面我将分两条示例详细讲解用PyCharm开发Django项目的完整攻略。 示例一:用PyCharm创建一个简单的Django项目 1. 创建PyCharm项目 在Pycharm中创建一个Python项目,右键选择“New -> Project”,在弹出的窗口中选择“Django”。 2. 安装Django 在项目创建完成后,使用以下命令安装Djang…

    Django 2023年5月16日
    00
  • django生产环境搭建(uWSGI+django+nginx+python+MySQL)

    下面我将详细讲解“django生产环境搭建(uWSGI+django+nginx+python+MySQL)”的完整攻略,过程中我会包含两条示例说明。 概述 本文将会介绍在Linux系统上搭建Django网站的完整过程,包括uWSGI和Nginx的安装和配置,以及与MySQL数据库的连接。 示例说明 为了更好地演示这个过程,我将会给出两个示例,一个使用的是P…

    Django 2023年5月16日
    00
  • python框架django中结合vue进行前后端分离

    使用Python框架Django和JavaScript框架Vue结合进行前后端分离,能够提高开发效率,优化代码结构和分工。下面是一个详细的攻略,分为两个示例说明。 示例一:前后端分离项目创建 1. 创建Django项目 使用Django的脚手架 django-admin 可以快速创建一个Django项目,命令如下: django-admin startpro…

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