Django中Paginator分页器的应用

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">&laquo;</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">&raquo;</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
                      }
                  )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值