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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42567323/article/details/102725927
前言

    上一篇文章实现了统计文章浏览量的功能,那么随之而来的就是实现最新最热文章的功能.
    感谢大神的教程: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">&laquo; 首页</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">尾页 &raquo;</a>
            {% endif %}
        </span>
    </div>
</div>
{% endblock content %}

写在最后

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

猜你喜欢

转载自blog.csdn.net/weixin_42567323/article/details/102725927