• python__Django 分页


    自定义分页的类:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Created by Mona on 2017/9/20
    
    
    from django.utils.safestring import mark_safe
    
    class Paginator:
        '''
        页码的格式依赖于bootstrap;
        使用案例:
            
        from django.shortcuts import render,redirect,HttpResponse
        from app01.models import *
        from tools import page  导入
            
        def index(request):
            base_url = request.path_info
            total_item_count = UserInfo.objects.all().count()
            current_page = int(request.GET.get('page',1))
        
            page_obj = page.Paginator(total_item_count,current_page,base_url)
        
            user_list = UserInfo.objects.all()[page_obj.start:page_obj.end]
        
            return render(request,'index.html',{'user_list':user_list,'html_page': page_obj.pager})
        
        '''
        def __init__(self,total_item_count,current_page,base_url,
              per_page_item_count=10,show_pager_count=11): ''' :param total_item_count: 总记录数 :param current_page: 当前页码 :param base_url: 页码的前缀URL :param per_page_item_count: 每页显示的记录数 :param show_pager_count: 显示的页码个数 ''' self.total_item_count = total_item_count self.current_page = current_page self.base_url = base_url self.per_page_item_count = per_page_item_count self.show_pager_count = show_pager_count total_page, res = divmod(self.total_item_count, self.per_page_item_count) if res: total_page += 1 self.total_page = total_page self.half_show_pager_count = int(total_page/2) @property def start(self): ''' 页码查询数据的开始位置 :return: ''' return (self.current_page-1)*self.per_page_item_count @property def end(self): ''' 页码查询数据的结束位置 :return: ''' return self.current_page*self.per_page_item_count @property def pager(self): ''' 返回需要的前端页码 :return: ''' page_list = [] ul = ' <ul class="pagination">' page_list.append(ul) if self.current_page == 1: prev = ' <li><a href="#">上一页</a></li>' else: prev = ' <li><a href="%s?page=%s">上一页</a></li>' % (self.base_url, self.current_page - 1) page_list.append(prev) # 如果数据特别少: if self.total_page < self.show_pager_count: pager_start = 1 pager_end = self.total_page + 1 else: if self.current_page <= self.half_show_pager_count: pager_start = 1 pager_end = self.show_pager_count + 1 else: if self.current_page + self.half_show_pager_count > self.total_page: pager_start = self.total_page - self.show_pager_count + 1 pager_end = self.total_page + 1 else: pager_start = self.current_page - self.half_show_pager_count pager_end = self.current_page + self.half_show_pager_count + 1 for i in range(pager_start, pager_end): if i == self.current_page: tpl = ' <li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,) else: tpl = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,) page_list.append(tpl) if self.current_page == self.total_page: nex = ' <li><a href="#">下一页</a></li>' else: nex = ' <li><a href="%s?page=%s">下一页</a></li>' % (self.base_url, self.current_page + 1,) page_list.append(nex) lu = ' </ul>' page_list.append(lu) html_page = mark_safe(''.join(page_list)) return html_page

    效果展示:

  • 相关阅读:
    开始写游戏 --- 第三十一篇
    开始写游戏 --- 第三十篇
    开始写游戏 --- 第二十九篇
    开始写游戏 --- 第二十八篇
    高并发性能调试经验分享
    eclipse调试jdk源码
    synzhronized原理3
    内存屏障
    《JAVA NIO》读书笔记
    并发工具类
  • 原文地址:https://www.cnblogs.com/mona524/p/7562332.html
Copyright © 2020-2023  润新知