博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 分页组件替换自定义分页
阅读量:7225 次
发布时间:2019-06-29

本文共 4708 字,大约阅读时间需要 15 分钟。

Django的分页器(paginator)

总之不太好用我们还是用自己的好一些 

自定义分页器

分页实现源码

"""自定义分页组件"""class Pagination(object):    def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ):        """        封装分页相关数据        :param current_page: 当前页        :param all_count:    数据库中的数据总条数        :param base_url: 分页中显示的URL前缀        :param params:  request.get 对象        :param per_page_num: 每页显示的数据条数        :param pager_count:  最多显示的页码个数        """        try:            current_page = int(current_page)        except Exception as e:            current_page = 1        if current_page < 1:            current_page = 1        self.current_page = current_page        self.all_count = all_count        self.per_page_num = per_page_num        self.base_url = base_url        all_pager, tmp = divmod(all_count, per_page_num)        if tmp:            all_pager += 1        self.all_pager = all_pager        self.pager_count = pager_count        self.pager_count_half = int((pager_count - 1) / 2)        import copy        params = copy.deepcopy(params)        params._mutable = True        self.params = params  # self.params : {"page":77,"title":"python","nid":1}    @property    def start(self):        return (self.current_page - 1) * self.per_page_num    @property    def end(self):        return self.current_page * self.per_page_num    def page_html(self):        # 如果总页码 < 11个:        if self.all_pager <= self.pager_count:            pager_start = 1            pager_end = self.all_pager + 1        # 总页码  > 11        else:            # 当前页如果<=页面上最多显示(11-1)/2个页码            if self.current_page <= self.pager_count_half:                pager_start = 1                pager_end = self.pager_count + 1            # 当前页大于5            else:                # 页码翻到最后                if (self.current_page + self.pager_count_half) > self.all_pager:                    pager_start = self.all_pager - self.pager_count + 1                    pager_end = self.all_pager + 1                else:                    pager_start = self.current_page - self.pager_count_half                    pager_end = self.current_page + self.pager_count_half + 1        page_html_list = []        self.params["page"] = 1        first_page = '
  • 首页
  • ' % (self.base_url, self.params.urlencode(),) page_html_list.append(first_page) if self.current_page <= 1: prev_page = '
  • 上一页
  • ' else: self.params["page"] = self.current_page - 1 prev_page = '
  • 上一页
  • ' % (self.base_url, self.params.urlencode(),) page_html_list.append(prev_page) for i in range(pager_start, pager_end): self.params["page"] = i if i == self.current_page: temp = '
  • %s
  • ' % (self.base_url, self.params.urlencode(), i,) else: temp = '
  • %s
  • ' % (self.base_url, self.params.urlencode(), i,) page_html_list.append(temp) if self.current_page >= self.all_pager: next_page = '
  • 下一页
  • ' else: self.params["page"] = self.current_page + 1 next_page = '
  • 下一页
  • ' % (self.base_url, self.params.urlencode(),) page_html_list.append(next_page) self.params["page"] = self.all_pager last_page = '
  • 尾页
  • ' % (self.base_url, self.params.urlencode(),) page_html_list.append(last_page) return ''.join(page_html_list)
    page.py

    视图函数调用

    from django.shortcuts import render,HttpResponse# Create your views here.from .models import *def index(request):    '''    book_list=[]    for  i in range(500):        book_obj=Book(title="book_%s"%i,price=i*i)        book_list.append(book_obj)    Book.objects.bulk_create(book_list)    '''    current_page = request.GET.get("page", 1)    all_count = Book.objects.all().count()    base_url = request.path  # /index/    from app01.utils.page import Pagination    pagination = Pagination(int(current_page),all_count,base_url,request.GET, per_page_num=8, pager_count=11,)    # def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ):    book_list = Book.objects.all()[pagination.start:pagination.end]    from django.http.request import QueryDict    # dic = QueryDict(mutable=True)    # dic["info"] = 123    # print(type(request.GET))    # request.GET["info"]=123    import copy    params = copy.deepcopy(request.GET)    params["xxx"] = 123    return render(request, "index.html", locals())
    views.py

    模板使用展示

        
    Title
      {
      % for foo in book_list %}
    • {
      { foo }}
    • {
      % endfor %}
    index.html

     

    转载于:https://www.cnblogs.com/shijieli/p/10349567.html

    你可能感兴趣的文章
    基于 HTML5 Canvas 的 3D 模型贴图问题
    查看>>
    让技术不要成为“背锅侠”!
    查看>>
    dubbo源码分析系列——dubbo的SPI机制源码分析
    查看>>
    表格单元格td设置宽度无效的解决办法
    查看>>
    防止视频资源被下载
    查看>>
    都是并发惹的祸
    查看>>
    eclipse实现JavaWeb项目 增量打包
    查看>>
    面试题系列一之 程序生命周期
    查看>>
    设计模式——观察者模式:气象监测应用
    查看>>
    NSUserDefaults简介及如何使用 NSUserDefaults 存储自定义对象
    查看>>
    IntelliJ IDEA搭建SpringBoot
    查看>>
    深入浅出iOS事件机制
    查看>>
    hadoop理解
    查看>>
    Oracle——18用户、角色和权限信息的视图总结
    查看>>
    WordPress 中的 Debug 模式(调试模式)
    查看>>
    node下使用express框架,ejs模板引擎
    查看>>
    搜索:文本的匹配算法
    查看>>
    Fedora 17 LibreOffice 办公套件的安装与汉化
    查看>>
    scrollview不充满屏幕的原因
    查看>>
    PHP单例模式
    查看>>