Django博客开发教程:实现搜索页面
1.1、Django博客开发教程:开发前的准备2.2、Django博客开发教程:项目需求分析3.Django博客开发教程:数据库设计分析4.Django博客开发教程:创建项目5.Django博客开发教程:基础配置6.Django博客开发教程:欢迎页面7.Django博客开发教程:创建数据库模型8.Django博客开发教程:用Admin管理后台管理数据9.Django博客开发教程:使用富文本编辑器添加数据10.Django博客开发教程:使用ckeditor富文本编辑器添加数据11.Django博客开发教程:URL与视图函数12.Django博客开发教程:体验django模板,13.Django博客开发教程:体验数据查询14.Django博客开发教程:一些常用的模板使用方法15.Django博客开发教程:实现模板之前的分析与准备16.Django博客开发教程:实现网站首页17.Django博客开发教程:实现文章列表18.Django博客开发教程:实现文章内容页19.Django博客开发教程:实现标签页面
20.Django博客开发教程:实现搜索页面
21.Django博客开发教程:单页面实现与代码优化搜索列表页的URL是:网站域名/s/搜索关键词,搜索页面,同样我们直接复制一份list.html页面,然后更名为search.html。
视图函数代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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修改为下面的:
1 2 3 | tempates /base .html action= "{% url 'index' %}s/" |
打开tempates/search.html页面,对照下面的代码进行修改。
您当前位置:
1 2 3 4 | tempates /search .html <div class= "breadcrumb" >您的位置: <a itemprop= "breadcrumb" href= "{% url 'index' %}" >首页< /a > » <span class= "current" >关键词:{{ ss }}< /span >< /div > |
搜索的关键词:
1 2 3 4 5 | tempates /search .html <div class= "main-title" > <h4 class= "post-left-title" >关键词:{{ ss }}< /h4 > < /div > |
搜索出来的文章列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 %} |
列表分页:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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交流!
合集:
Django博客开发教程
分类:
开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理