Django学习教程(十八)实现最近文章列表

Django学习教程(十八)实现最近文章列表

前言

  上一篇我们学习了Django分页功能,可以把文章列表分页展示。这一篇我们继续完善博客页面,实现最近文章列表。

  最近文章列表在博客系统中很常见,一般会显示最新发布的几篇文章,方便用户快速查看。

1.查询最近文章

最近文章可以按照创建时间倒序排序,然后取前几条数据。

代码:

复制代码
recent_articles = Article.objects.all().order_by('-created_time')[:5]

这里的[:5]表示只取前5条数据。

2.修改视图函数

打开views.py文件,修改article_list方法。

代码:

复制代码
from django.shortcuts import render
from django.core.paginator import Paginator
from .models import Article


def article_list(request):
    articles = Article.objects.all().order_by('-created_time')
    recent_articles = Article.objects.all().order_by('-created_time')[:5]

    paginator = Paginator(articles, 5)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    context = {
        'page_obj': page_obj,
        'recent_articles': recent_articles
    }

    return render(request, 'blog/article_list.html', context)

3.修改模板页面

可以在页面右侧或文章列表下面显示最近文章。

代码:

复制代码
<h4>最近文章</h4>

<ul class="list-group mb-4">
    {% for article in recent_articles %}
        <li class="list-group-item">
            <a href="/article/{{ article.id }}/">{{ article.title }}</a>
        </li>
    {% endfor %}
</ul>

4.完整页面结构示例

可以把页面分成左右两部分。

代码:

复制代码
<div class="container mt-4">
    <div class="row">
        <div class="col-md-8">
            {% for article in page_obj %}
                <div class="card mb-3">
                    <div class="card-body">
                        <h5 class="card-title">{{ article.title }}</h5>
                        <p class="card-text">{{ article.content }}</p>
                        <a href="/article/{{ article.id }}/" class="btn btn-primary">查看详情</a>
                    </div>
                </div>
            {% endfor %}
        </div>

        <div class="col-md-4">
            <h4>最近文章</h4>
            <ul class="list-group">
                {% for article in recent_articles %}
                    <li class="list-group-item">
                        <a href="/article/{{ article.id }}/">{{ article.title }}</a>
                    </li>
                {% endfor %}
            </ul>
        </div>
    </div>
</div>

5.访问测试

启动项目后,访问首页。

地址:

复制代码
http://127.0.0.1:8000/

如果右侧能看到最近文章列表,说明功能实现成功。

6.总结

  这一篇我们实现了最近文章列表,主要通过order_by按照创建时间倒序排序,然后使用切片取前5条数据。

  最近文章列表可以提高博客页面的可读性,也方便用户快速查看新文章。好了这一篇就到这里,下一篇我们对这个Django博客项目做一个总结,如果对你有帮助,点赞加关注,下篇见。