分页器制作

        分页操作是我们在前端展示大量数据的必须操作。下面介绍了一种简单分页器实现的基本原理和步骤,数据来源于数据库。

        工具: python中的django框架,MySQL数据库。

        首先,在进行分页制作之前,需要明确以下几个问题:

        ①想访问哪一页

        需要访问哪一页可以通过前端,通过直接在url后面携带数据的‘GET’请求方式向后端传递数据,例如:url/?page=1,此时获取的展示页码为字符串类型,需要我们手动转为整型才可以完成后续的加减操作。后端获取数据方式为:

current_page=request.GET.get('page', 1)
int_cur_page_num = int(current_page_num)

当前端有页码数据传入时则自动获取当前页码,当没有页码传入时,自动在页面显示第一页

        ②每页需要展示多少条内容

        每页显示的内容由我们自己定义,如:

per_page_num = 10

        ③内容展示的起始位置和终止位置

        起始位置和终止位置的确定,根据每页展示内容的数量和当前展示的页码可以计算得到,起始页码和终止页码计算如下:

# 起始页码    
start_page = (int_cur_page_num-1) * per_page_num

# 终止页码
end_page = int_cur_page_num*per_page_num

# 传递给前端需要展示的内容
book_list = models.Book.objects.all()[start_page:end_page]

        通过解决以上三个问题,基本实现了数据分页显示的操作,但是,此时需要我们手动传入需要展示的哪一页的数值(图中标红的位置),这无疑会给使用者带来很大的麻烦。

          为了解决以上以上问题,需要在下端展示出可以点击的展示页码,通过点击即可实现展示页的跳转。在引用了bootstrap中的分页组件,通过该组件可以简单有效的解决展示页码向后端传递的问题,对其中的 li 标签进行简单修改即可,修改结果的如下。通过在后端操作修改数字1,2,3....即可。

<li><a href="?page=1">1</a></li>

         需要修改展示页,首先需要对展示对象进行处理,一是统计需要展示内容的所有数量,二是确定展示页面的数量。

        统计需要展示内容的数量利用采用count方法,确定展示页面的数量利用divmode方法(自己确定每页展示内容为10页),代码如下。

# 确定展示内容数量
book_query = models.Book.objects.all()  # 获取需要展示的内容
book_num = book_query.count()     # 表示需要展示内容的数量

# 确定展示页面数量
per_page_num = 10
page_num,more = divmod(book_num, per_page_num)  # 页面数量用page_num表示,more表示余数
if more:                                        # 通过余数来更近一步确认页面数量
    page_num += 1

        至此,由于页面数量无法传到前端进行操作,所以将标签页写在后端,然后返回给前端,前端再进行显示。

page_html = ''
# 确保下端展示页链接数不出现负数,展示页码开始为第一页
limit_num = 6
if int_cur_page_num < 6:
    now_num = limit_num
else:
    now_num = int_cur_page_num
# 确定下端展示页码链接的数量,为当前展示页码的前5个和后5个,总共11个
for i in range(now_num - 5,now_num + 6):  
      # 将显示页进行高亮显示
    if int_cur_page_num == i:
        # 向前端传递的展示页链接html标签全部存储与page_html中,并对当前显示页进行高亮显示
        page_html = page_html+'<li class="active"><a href="?page=%s">%s</a></li>'%(i,i)
     else:
         page_html = page_html + '<li><a href="?page=%s">%s</a></li>' % (i, i)

        通过以上步骤已经基本完成了分页器的基本操作。通过都以上代码进行组合即可基本实现前端分页器的显示。

后端代码整体代码如下:

def ab_bo(request):
    book_query = models.Book.objects.all()
    book_num = book_query.count()
    current_page_num = request.GET.get('page',1) # 获取访问的展示页,如果没有则显示第一页
    int_cur_page_num = int(current_page_num)
    per_page_num = 10
    page_num,more = divmod(book_num, per_page_num)

    if more:
        page_num += 1
    page_html = ''
    limit_num = 6
    if int_cur_page_num < 6:
        now_num = limit_num
    else:
        now_num = int_cur_page_num
    for i in range(now_num - 5,now_num + 6):
        if int_cur_page_num == i:
            page_html = page_html+'<li class="active"><a href="?page=%s">%s</a></li>'%(i,i) # 将显示页进行高亮显示
        else:
            page_html = page_html + '<li><a href="?page=%s">%s</a></li>' % (i, i)
    start_page = (int_cur_page_num-1) * per_page_num
    end_page = int_cur_page_num*per_page_num
    book_list = models.Book.objects.all()[start_page:end_page]
    return render(request, 'ab_bo.html', locals())

 前端页码展示如下:

<div class="container-fluid">
    <div class="row">
        <div class="col-md-offset-2">
            {% for foo in book_list %}
            <p>{{ foo.title }}</p>
            {% endfor %}
        </div>
    </div>
</div>
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    {{ page_html|safe }}
    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

 最终效果如下:

         以上代码表示了一个简单分页器的实现过程,更过的功能还可以在此基础上进行修改和添加,恳请大家不吝赐教呀~~~~~

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值