版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前言
上一篇文章实现了统计文章浏览量的功能,那么随之而来的就是实现最新最热文章的功能.
感谢大神的教程:Django搭建个人博客.
一.最新,最热文章
其实最热文章功能实现原理很简单,就是根据文章的浏览量来对文章进行排序,而最新文章的话就不用做了,因为在存文章数据表的时候会有文章修改时间,根据这个时间来排序就可以了,当然了,也不用我们自己来排序.
实现最热文章.
先修改文章列表视图:
article/views.py:
def article_list(request):
# 根据GET请求中查询条件
# 返回不同排序的对象数组
if request.GET.get('order') == 'total_views':
article_list = ArticlePost.objects.all().order_by('-total_views')
order = 'total_views'
else:
article_list = ArticlePost.objects.all()
order = 'normal'
paginator = Paginator(article_list,4)
page = request.GET.get('page')
articles = paginator.get_page(page)
context = {'articles':articles,'order':order}
return render(request,'article/list.html',context)
然后修改模板:
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' %}">
最新
</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 }}" class="btn btn-success">« 首页</a>
<span>...</span>
<a href="?page={{ articles.previous_page_number }}&order={{ order }}"
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 }}"
class="btn btn-secondary">{{ articles.next_page_number }}</a>
<span>...</span>
<a href="?page={{ articles.paginator.num_pages }}&order={{ order }}"
class="btn btn-success">尾页 »</a>
{% endif %}
</span>
</div>
</div>
{% endblock content %}
写在最后
本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.