前言

实现一个简单的搜索文章的功能.
    感谢大神的教程:Django搭建个人博客.

一.搜索文章

1.修改视图函数

article/views.py:

def article_list(request):search = request.GET.get('search')order = request.GET.get('order')# 用户搜索逻辑if search:if order == 'total_views':# 用 Q对象 进行联合搜索article_list = ArticlePost.objects.filter(Q(title__icontains=search) |Q(body__icontains=search)).order_by('-total_views')else:article_list = ArticlePost.objects.filter(Q(title__icontains=search) |Q(body__icontains=search))else:# 将 search 参数重置为空search = ''if order == 'total_views':article_list = ArticlePost.objects.all().order_by('-total_views')else:article_list = ArticlePost.objects.all()paginator = Paginator(article_list, 3)page = request.GET.get('page')articles = paginator.get_page(page)# 增加 search 到 contextcontext = {'articles': articles, 'order': order, 'search': search}return render(request, 'article/list.html', context)

2.修改模板

article/list.html:

<!-- extends表明此页面继承自 base.html 文件 -->
{% extends "base.html" %}
{% load staticfiles %}<!-- 写入 base.html 中定义的 title -->
{% block title %}首页
{% endblock title %}<!-- 写入 base.html 中定义的 content -->
{% block content %}<!-- 定义放置文章标题的div容器 -->
<div class="container"><nav aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><a href="{% url 'article:article_list' %}?search={{ search }}">最新</a></li><li class="breadcrumb-item"><a href="{% url 'article:article_list' %}?order=total_views&search={{ search }}">最热</a></li></ol></nav><!-- 新增,搜索栏 --><div class="row"><div class="col-auto mr-auto"><form class="form-inline" ><label class="sr-only">content</label><input type="text"class="form-control mb-2 mr-sm-2"name="search"placeholder="搜索文章..."required></form></div></div><!-- 新增,搜索提示语 -->{% if search %}{% if articles %}<h4><span style="color: red">"{{ search }}"</span>的搜索结果如下:</h4><hr>{% else %}<h4>暂无<span style="color: red">"{{ search }}"</span>有关的文章。</h4><hr>{% endif %}{% endif %}<nav aria-label="breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><a href="{% url 'article:article_list' %}">最新</a></li><li class="breadcrumb-item"><a href="{% url 'article:article_list' %}?order=total_views">最热</a></li></ol></nav><div class="row mt-2">{% for article in articles %}<!-- 文章内容 --><div class="col-4 mb-4"><!-- 卡片容器 --><div class="card h-100"><!-- 标题 --><h4 class="card-header">{{ article.title }}</h4><!-- 摘要 --><div class="card-body"><p class="card-text">{{ article.body|slice:'100' }}...</p></div><!-- 注脚 --><div class="card-footer"><a href="{% url 'article:article_detail' article.id %}" class="btn btn-primary">阅读本文</a><!-- 显示浏览量 --><span><small class="col align-self-end" style="color: gray;">浏览: {{ article.total_views }}</small></span></div></div></div>{% endfor %}</div>
</div>
<!-- 页码导航 -->
<div class="pagination row"><div class="m-auto"><span class="step-links"><!-- 如果不是第一页,则显示上翻按钮 -->{% if articles.has_previous %}<a href="?page=1&order={{ order }}&search={{ search }}" class="btn btn-success">&laquo; 首页</a><span>...</span><a href="?page={{ articles.previous_page_number }}&order={{ order }}&search={{ search }}"class="btn btn-secondary">{{ articles.previous_page_number }}</a>{% endif %}<!-- 当前页面 --><span class="current btn btn-danger btn-lg">{{ articles.number }}</span><!-- 如果不是最末页,则显示下翻按钮 -->{% if articles.has_next %}<a href="?page={{ articles.next_page_number }}&order={{ order }}&search={{ search }}"class="btn btn-secondary">{{ articles.next_page_number }}</a><span>...</span><a href="?page={{ articles.paginator.num_pages }}&order={{ order }}&search={{ search }}"class="btn btn-success">尾页 &raquo;</a>{% endif %}</span></div>
</div>
{% endblock content %}

写在最后

本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.

Django做一个简单的博客系统(11)----搜索文章相关推荐

  1. Django做一个简单的博客系统(13)----增加文章栏目

    前言 添加一个文章栏目功能.     感谢大神的教程:Django搭建个人博客. 一.文章栏目 1.修改模型 article/models.py: ...class ArticleColumn(mod ...

  2. Django做一个简单的博客系统(14)----增加文章标签

    前言 添加一个文章标签功能.     感谢大神的教程:Django搭建个人博客. 一.文章标签 1.准备 首先要安装Django-taggit:: pip install django-taggit ...

  3. Django做一个简单的博客系统(10)----最热文章

    前言 上一篇文章实现了统计文章浏览量的功能,那么随之而来的就是实现最新最热文章的功能.     感谢大神的教程:Django搭建个人博客. 一.最新,最热文章 其实最热文章功能实现原理很简单,就是根据 ...

  4. django初探-创建简单的博客系统(一)

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  5. [Django快速开发1]搭建一个简单的博客系统(1)

    系列文章目录 Django快速开发0快速搭建环境并得到django项目的hello world 文章目录 系列文章目录 前言 从Django的模型层开始书写 定义文章模型: 使用脚本向sqlite3中 ...

  6. php ci框架后台管理,ci: 羽翼后台管理平台是一个简单的博客系统,后端基于CodeIgniter,前端基于Semantic UI 2.2.10...

    羽翼后台管理平台(博客系统) 羽翼的由来 羽翼的故事是9月20日的晚上,我突然就想到--造翼者小说.我通过自己构思不少的东西.羽毛代表着轻松.纯洁和神圣的:翼代表着升天和梦想,两者在一起的含义:带着一 ...

  7. SpringBoot+Vue快速搭建简单个人博客系统之后端

    我是markerhub作者的一名粉丝,最初在markerhub公众号关注了博主,去B站白嫖了博主的基于SpringBoot+Vue开发的前后端分离博客项目完整教学的视频教程,看一遍跟着老师敲一遍,有的 ...

  8. 用RC522与arduino做一个简单的门禁系统

    用RC522与arduino做一个简单的门禁系统 插本成功要去新学校了,结果发现新学校宿舍没有电梯没有电子门(虽然海景房很香).这对于住惯养老院的我属实难受所所以打算自己也整一个IC卡的门禁系统.然后 ...

  9. 用koa mongodb 做了个简单的博客系统

    最近在研究koa和mongodb,简单做了个博客系统,目前还未开放评论和发帖功能,欢迎大家吐槽~ ?安装 git clone https://github.com/oliyg/alljscc.git ...

最新文章

  1. 链表-回文链表(复制+双指针法)
  2. Mysql跨机房同步方案
  3. AOP埋点从入门到放弃(二)
  4. java中static作用详解
  5. C++初始化和关闭roscpp节点
  6. mysql存储语句_MYSQL 常用语句保存
  7. [css] 假如css的分号写在声明块之外,将会发生什么呢?解释下原因
  8. 辗转相除法应用之倒C语言实现
  9. NUC1214 回文素数
  10. 3小时GIS入门教程(二)GIS数据格式、坐标系
  11. EXCEL保存“加载宏”
  12. 《五分钟商学院》个人篇学习总结(下)
  13. windows10便签在哪,windows电脑版便签工具在哪里打开
  14. 中期答辩记录与总结反思
  15. Excel如何用IF函数进行数据筛选
  16. 英文版软件工程试题模拟试题
  17. 韩版三星s20 5g使用
  18. 处理7z格式的001 002 文件
  19. Unity 数据存储与读取_JSON
  20. 电脑护眼设置---保护你的眼睛(转载)

热门文章

  1. canvas理解:一看就懂的save和restore
  2. 重启文件资源管理器explorer
  3. 201409-1 相邻数对
  4. TypeScript 及类型库 tsd typings @types/XXX 入门
  5. 谁让方便面不再方便?
  6. [LeetCode]049-Group Anagrams
  7. python简单练习题
  8. 若依,报错 Error: Cannot find module ‘@/views/system/user/index
  9. ThingsPanel是如何解决物联网开发慢,成本高的问题的?
  10. servlet入门与进阶