首页 > 其他分享 >Django博客开发教程:实现搜索页面

Django博客开发教程:实现搜索页面

时间:2023-08-16 13:55:23浏览次数:40  
标签:search tempates list 教程 Django html 搜索 page 页面

搜索列表页的URL是:网站域名/s/搜索关键词,搜索页面,同样我们直接复制一份list.html页面,然后更名为search.html。

视图函数代码:

def search(request):
    ss=request.GET.get('search')#获取搜索的关键词
    list = Article.objects.filter(title__icontains=ss)#获取到搜索关键词通过标题进行匹配
    remen = Article.objects.filter(tui__id=2)[:6]
    allcategory = Category.objects.all()
    page = request.GET.get('page')
    tags = Tag.objects.all()
    paginator = Paginator(list, 10)
    try:
        list = paginator.page(page) # 获取当前页码的记录
    except PageNotAnInteger:
        list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容
    except EmptyPage:
        list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
    return render(request, 'search.html', locals())

里面要留意的是title__icontains=ss,这话的意思是,用搜索关键词ss和文章标题进行匹配,如果标题包含关键词ss就会被筛选出来,__icontains方法不区分字母大小写。

打开tempates/base.html页面,找到头部的搜索代码,把action的URL修改为下面的:

tempates/base.html

action="{% url 'index' %}s/"

打开tempates/search.html页面,对照下面的代码进行修改。

您当前位置:

tempates/search.html

<div class="breadcrumb">您的位置: <a itemprop="breadcrumb" href="{% url 'index' %}">首页</a> » 
<span class="current">关键词:{{ ss }}</span></div>

搜索的关键词:

tempates/search.html

<div class="main-title">
    <h4 class="post-left-title">关键词:{{ ss }}</h4>
</div>

搜索出来的文章列表:

tempates/search.html

{% for list in list %}
<div class="article-box clearfix excerpt-1">
<div class="col-md-4">
    <div class="thumbnail">
        <a href="{% url 'index' %}show-{{ list.id }}.html" title="{{ list.title }}">
            <img src="{% url 'index' %}media/{{ list.img }}"
                 srcset="{% url 'index' %}media/{{ list.img }}"
                 alt="{{ list.title }}" class="wp-post-image" width="240" height="160"/></a>
    </div>
</div>
<div class="col-md-8">
    <h2><a href="{% url 'index' %}show-{{ list.id }}.html" target="_blank"
           title="{{ list.title }}">{{ list.title }}</a></h2>
    <p class="txtcont hidden-xs"><a href="{% url 'index' %}show-{{ list.id }}.html"
                                    target="_blank"
                                    title="{{ list.title }}">{{ list.excerpt }}</a></p>
    <div class="meta"><span class="label label-info"><a
            href="{% url 'index' %}list-{{ list.category_id }}.html">{{ list.category.name }}</a></span>
        <time class="item"><i
                class="fa fa-clock-o"></i>{{ list.created_time|date:"Y年m月d日" }}
        </time>
    </div>
</div>
</div>
{% endfor %}

列表分页:

tempates/search.html

<div class="pagination">
<ul>
    {% if list.has_previous %}
    <li class="prev-page"><a href="{% url 'index' %}s/?search={{ ss }}&page={{ list.previous_page_number }}">上一页</a></li>
    {% else %}
     <li class="prev-page"></li>
    {% endif %}


        {% for num in list.paginator.page_range %}
            {% if num %}
                {% ifequal num list.number %}
                    <li class="active"><span>{{ num }}</span></li>
                {% else %}
                    <li><a href="{% url 'index' %}s/?search={{ ss }}&page={{ num }}">{{ num }}</a></li>
                {% endifequal %}
            {% else %}
                <li class="disabled"><span>...</span></li>
            {% endif %}
        {% endfor %}


        {% if list.has_next %}
            <li class="next-page"><a href="{% url 'index' %}s/?search={{ ss }}&page={{ list.next_page_number }}">下一页</a></li>
        {% else %}
            <li class="prev-page"></li>
        {% endif %}
</ul>
</div>

留意:这里面的分页URL和列表页、标签页的分页URL是不一样的,自己留意对比。然后可以自己尝试修改和列表页面一样的URL结构试试。

搜索页面实现完毕!更多疑问可以加微信:VIPdjango交流!

标签:search,tempates,list,教程,Django,html,搜索,page,页面
From: https://www.cnblogs.com/yoloooo/p/17633831.html

相关文章

  • Django博客开发教程:实现标签页面
    标签列表是的URL是:网站域名/tag/标签名,标签名是URL里的<tag>传进来的。标签页面和列表页面展现样式是一样的,前面我们也提及过,所以我们直接复制list.html页面,然后更名为tags.html。视图函数代码:blog/views.pydef tag(request, tag):    list = Article.objects.filter......
  • Django博客开发教程:实现文章列表
    文章列表的URL是:网站域名/list-分类ID.html,文章列表页面需要调用的地方相对首页就少了很多。我这边就不再像首页那样做详细解释了。直接上视图函数代码:blog/views.py#文章列表def list(request,lid):    list = Article.objects.filter(category_id=lid)#获取通过URL......
  • 无涯教程-Perl - sleep函数
    描述此函数将脚本暂停EXPR秒,如果未指定EXPR,则暂停脚本。返回实际睡眠的秒数。可以被信号处理程序打断,但是您应该避免使用带Alert的睡眠,因为许多系统将Alert用于睡眠实现。语法以下是此函数的简单语法-sleepEXPRsleep返回值此函数返回整数,实际睡眠的秒数例以下......
  • kubeadm 部署的集群升级教程
    1、确定升级的集群版本,查看现有的集群版本kubectl getnodes2、执行如下命令确定升级的版本,目标版本是v1.27.4yumlist--showduplicateskubeadm--disableexcludes=kubernetes3、升级master节点,所有master节点都要操作,并升级完验证版本yuminstall-ykubeadm-1.27.4-0-......
  • 无涯教程-Perl - sin函数
    描述此函数返回EXPR的正弦值;如果未指定,则返回$_。此函数始终返回浮点数。语法以下是此函数的简单语法-sinEXPRsin返回值此函数返回EXPR的浮点正弦值例以下是显示其基本用法的示例代码-#!/usr/bin/perl$temp=sin(4);print"sinvalueof4is$temp";执行上......
  • IDEA 2023.2 最新安装使用教程(附激活码,亲测好用)
    申明:本教程IntelliJIDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!PS:本教程最新更新时间:2023年7月28日,持续更新,收藏防失联哟说明本教程适用于JetBrains全系列产品,包括IDEA、Pycharm、WebStorm、Phpstorm、Da......
  • 客服系统搭建教程,这些技巧你必须掌握!
    随着企业对客户服务需求的不断增加,客服系统的搭建成为了一项重要的任务。一个高效、稳定的客服系统能够提升客户满意度,增强企业竞争力。那么,在搭建客服系统时,有哪些技能是我们必须掌握的呢?了解客户需求在搭建客服系统之前,我们需要深入了解客户的需求,包括客户群体、服务内容、......
  • 嵌入式教程_DSP教学实验箱:2-9 VGA显示实验
    实验目的本节视频的目的是了解VGA接口的功能和使用,掌握VGA显示的原理并实现VGA显示图像数据。实验原理底板原理图控制VGA的管脚是VPIF总线,和控制LCD显示的管脚是复用的VGA(VideoGraphicsArray)VGA是视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由IBM公司于1987年推出,因其......
  • 【开源分享】在线客服系统搭建-基于php和swoole客服系统CRMchat(附源码完整搭建教程)
    CRMChat是一款开源的在线客服系统,后台管理使用thinkphp框架,消息通讯使用swoole扩展,现在我来部署搭建一下。这是一款不可商用的开源客服系统,如果有商用需求可以访问我的网站:gofly.v1kf.com域名解析以阿里云为例,我添加了自己的二级域名crmchat.v1kf.com到服务器IPPHP扩展安装......
  • TienChin 创建菜单页面
    上一节当中我们只是给后台添加了对应的菜单,实际上对应的页面还没有存在这节主要就是创建出来页面:促销活动:activity统计分析:analysis商机管理:business渠道管理:channel线索管理:clue合同管理:contract私教课程:course转派管理:transfertemplate:<template>......