1、前端html内容
<div class="container page-body">
<div class="col-md-9" role="main">
<!--列表清单-->
<div class="body-main">
{% for article in article_list %}
<div>
<h2><a href="/blog/detail/{{article.article_id}}">{{ article.title }}</a></h2>
<p>
{{article.brief_content}}
</p>
</div>
{% endfor %}
</div>
<!--分页-->
<div class="body-footer">
<div class="col-md-4 col-md-offset-3">
<nav aria-label="Page navigation">
<ul class="pagination">
<li> <!--上一页-->
<a href="/blog/index?page={{previous_page}}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% for num in page_num %}
<li><a href="/blog/index?page={{num}}">{{ num }}</a></li>
{% endfor %}
<li> <!--下一页-->
<a href="/blog/index?page={{next_page}}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="col-md-3" role="complementary">
<div>
<h2>最新文章</h2>
{% for article in top10_article_list %}
<h4><a href="/blog/detail/{{article.article_id}}">{{ article.title }}</a></h4>
{% endfor %}
</div>
</div>
</div>
2、展示效果:
3、后端实现逻辑
from django.core.paginator import Paginator
from django.shortcuts import render
from django.http import HttpResponse
def get_index_page(request):
#获取页码参数
page = request.GET.get('page')
if page:
page = int(page)
else:
page = 1
print('page param:',page)
#获取所有的信息
all_article = Article.objects.all()
#通过切片和发布日期倒序获取前10条记录;
top10_article_list = Article.objects.order_by('-publish_date')[:10]
#分页器实例对象(参数1:待分页的对象列表;参数2:每页数量);
paginator = Paginator(all_article,6)
#获取总页数量;
page_num = paginator.num_pages
print('page num:',page_num)
#通过页码获取页面列表清单;
page_article_list = paginator.page(page)
#判断是否有下一页;
if page_article_list.has_next():
next_page = page+1
else:
next_page = page
#判断是否有上一页;
if page_article_list.has_previous():
previous_page = page -1
else:
previous_page = page
return render( request,'blog/index.html',
{
'article_list': page_article_list,
'page_num': range(1,page_num+1),
'curr_page': page,
'next_page': next_page,
'previous_page': previous_page,
'top10_article_list': top10_article_list
}
)