django 1.11 自定义分页功能的实现

在WEB中很多时候是免不了要分页的,如果我们的数据太多了,分出来6000多页或者更多的时候,用django自带的分页功能就不好看了,所以我们来自定义一下。我是参考http://www.cnblogs.com/nulige/p/6558207.html这篇文章的,不过如果照着抄的话,会报错的,我修改了几个地方,实现效果如下图:




最后代码:

urls.py的代码就不写了

views.py(我把这分页包装了一下,便于移植):

class CustomPaginator(Paginator):
    def __init__(self, current_page, per_pager_num, *args, **kwargs):
        self.current_page = int(current_page)
        self.per_pager_num = int(per_pager_num)
        super(CustomPaginator, self).__init__(*args, **kwargs)

    def pager_num_range(self):
        if self.num_pages < self.per_pager_num:
            return range(1, self.num_pages + 1)

        half_part = int(self.per_pager_num / 2)
        if self.current_page <= half_part:
            return range(1, self.per_pager_num + 1)

        if (self.current_page + half_part) > self.num_pages:
            return range(self.num_pages - self.per_pager_num + 1, self.num_pages)
        return range((self.current_page - half_part), (self.current_page + half_part + 1))

def pagedivide(request, USER_LIST):
        try:
            current_page = request.GET.get('page')
            paginator = CustomPaginator(current_page, 11, USER_LIST, 10)
        except:
            current_page = 1
            paginator = CustomPaginator(current_page, 11, USER_LIST, 10)

        try:
            paginator = paginator.page(current_page)
        except PageNotAnInteger:
            paginator = paginator.page(1)
        except EmptyPage:
            paginator = paginator.page(paginator.num_pages)
        return paginator


html模板:

<tbody>
                                  {% for re in users.object_list %}
                                      {% if re.is_target %}
                                      <tr class="gradeX" style="width:200px; height:50px;">
         <td>{{ re.created_at }} </td>
         <td>中国  {{ re.origin_id }} </td>
                                          <td>{{ re.origin_url | slice:"50" }}....</td>
                                          <td>{{ re.origin_cookie | slice:"50" }}...</td>
         <td><span class="am-icon-close" style="color:crimson"></span></td>
      </tr>
                                  {% else %}
      <tr class="gradeX" style="width:200px; height:60px;">
         <td>{{ re.created_at }} </td>
         <td>中国  {{ re.origin_id }} </td>
                                          <td>{{ re.origin_url | slice:"50" }}....</td>
                                          <td>{{ re.origin_cookie | slice:"50" }}...</td>
         <td><span class="am-icon-check" style="color:greenyellow"></span></td>
      </tr>
                                  {% endif %}
                                  {% endfor %}
      <!-- more data -->
   </tbody>
</table>
                          <nav aria-label="Page navigation" style="margin-left: 1000px">
                                  <ul class="pagination">
                                      {% if users.has_previous %}
                                          <li>
                                          <a href="?page={{ users.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
                                          </li>
                                      {% endif %}

                                     {% for pg in users.paginator.pager_num_range %}
                                      {% if pg == users.number %}
                                      <li class="active"><a href="?page={{ pg }}">{{ pg }}</a></li>
                                      {% else %}
                                      <li><a href="?page={{ pg }}">{{ pg }}</a></li>
                                      {% endif %}
                                      {% endfor %}
                                      {% if users.has_next %}
                                          <li>
                                              <a href="?page={{ users.next_page_number }}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
                                      {% endif %}
                                          <span style="font-size: 20px;margin-left: 30px">{{ users.number }} /{{ users.paginator.num_pages }}</span>
                                  </ul>
                                  </nav>












评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值