Django----列表分页(使用Django的分页组件)

目的:是为了实现列表分页

1、定制URL
http://127.0.0.1:8000/blog/get_article?page=3
之前定制URL是在url后增加了/id,这次使用参数的方式
def get_article(request):
    page=request.GET.get('page');---------->使用GET.get方法来获取URL后的page参数的值,同理,如果将来url后跟了其他更多的参数,也可以使用这种方法指定返回
    if page:------------------->此处可以简单对page进行处理,因为使用get返回的值是Str类型,需要转成int
        page=int(page);
    else:
        page=1;--------->默认为1
    print('PAGE 参数为:',page);

 

 

2、引入Djanjo的分页组件
from django.core.paginator import Paginator;--------->重点,这就是Django的分页组件

#列表页
def get_article(request):
    page=request.GET.get('page');
    if page:
        page=int(page);
    else:
        page=1;
    print('PAGE 参数为:',page);
    article_list=Article.objects.all();
    #实例化一个分页组件,第一个参数是需要被分页的列表,第二个参数是每一个的item个数,比如这边指定每页个数为2
    paginator=Paginator(article_list,2);
    #page方法,传入一个参数,表示第几页的列表,这边传入的page,是你在地址中写的参数
    page_article_list=paginator.page(page);----------------->获得指定page的列表
    page_num=paginator.num_pages;------------------->获得列表被分页处理后,总共被分为多少页
    #print('page_num:',page_num);
    #判断是否存在下一页
    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,'index.html',{
#根据前端,我们需要知道当前page的列表,需要知道点击【上一页】,跳转,点击下一页的跳转,需要知道被分了几页
'article_list':page_article_list,------->当前page的list 'page_num':range(1,page_num+1),---------->被分了几页,这个返回一个数组,前端直接for循环渲染 'curr_page':page,---------->当前页数 'next_page':next_page,---------->下一页 'previous_page':previous_page————————————————>上一页 })

 

3、前端修改
引入bootstrap的分页代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页--文章列表页</title>

    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

     <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

      <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>
<body>
<div class="container page-header">
    <h1>文章列表
    <small>by zhonghuihong </small></h1>

</div>
<div class="container page-body">
    <div class="col-md-9" role="main">
        <div class="body-main">
            <div>
                {% for article in article_list %}
                    <h2><a href="get_detail/{{ article.article_id }}">{{article.article_title}}</a></h2>
                          <p>{{article.article_content}}</p>
                {% endfor %}

            </div>

        </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/get_article?page={{ next_page }}" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
  {% for num in page_num %}
      <li>
          <a href="/blog/get_article?page={{ num }}">{{ num }}</a>
      </li>
      {% endfor %}

    <li>
      <a href="/blog/get_article?page={{ previous_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 article_list  %}

            <h4><a href="get_detail/{{ article.article_id }}">{{article.article_title}}</a></h4>
            {% endfor %}
        </div>
    </div>
</div>

</body>
</html>

 

 

4、调试验收--确认功能正常无报错

 

 

 

 

耶!!!继续努力

转载于:https://www.cnblogs.com/shenyexiaoqingxin/p/10648286.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值