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博客项目做一个总结,如果对你有帮助,点赞加关注,下篇见。