django 1.11 自定義分頁功能的實現
阿新 • • 發佈:2019-02-09
在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">«</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">»</span></a></li> {% endif %} <span style="font-size: 20px;margin-left: 30px">{{ users.number }} /{{ users.paginator.num_pages }}</span> </ul> </nav>