博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django-分页
阅读量:7006 次
发布时间:2019-06-27

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

Django的分页器

views

from django.shortcuts import render,HttpResponse,redirectfrom app01.models import *from django.core.paginator import Paginator# Create your views here.def index(request):    # 往数据库表中插入数据    # book_list=[]    # for i in range(100):    #     book_obj = Book(title="Book_%s"%i,price=i*i)    #     book_list.append(book_obj)    # Book.objects.bulk_create(book_list)    # Book_all = Book.objects.all()    book_list = Book.objects.all()    paginator = Paginator(book_list, 5)    c_page = request.GET.get("page", 1)   # print("count", paginator.count) 数据总数    # print("num_pages", paginator.num_pages) 总页数    # print("page_range", paginator.page_range) 页码的列表try:        page = paginator.page(c_page)    except:        page = paginator.page(1) #第一页的page对象        # print(page.has_next())  #是否有下一页        # print(page.next_page_number()) #下一页页码        # print(page.has_previous()) #是否有上一页        # print(page.previous_page_number()) #上一页页码    return render(request,"index.html",{
"page":page,"paginator":paginator,"c_page":int(c_page)})

templates

    
index{% csrf_token %}
    {% for book in page.object_list %}

    {

    { book.title }}:{
    { book.price }}

    {% endfor %}

  如果页数非常多时,换另外一种方式

def index(request):    book_list=Book.objects.all()    paginator = Paginator(book_list, 15)    page = request.GET.get('page',1)    currentPage=int(page)    if paginator.num_pages>30:        if currentPage-5<1:            pageRange=range(1,11)        elif currentPage+5>paginator.num_pages:            pageRange=range(currentPage-5,paginator.num_pages+1)        else:            pageRange=range(currentPage-5,currentPage+5)    else:        pageRange=paginator.page_range    try:        print(page)        book_list = paginator.page(page)    except PageNotAnInteger:        book_list = paginator.page(1)    except EmptyPage:        book_list = paginator.page(paginator.num_pages)    return render(request,"index.html",locals())

自定义分页器

"""分页组件使用示例:    obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.path_info)    page_user_list = USER_LIST[obj.start:obj.end]    page_html = obj.page_html()    return render(request,'index.html',{'users':page_user_list,'page_html':page_html})"""class Pagination(object):    def __init__(self,current_page,all_count,base_url,per_page_num=2,pager_count=11):        """        封装分页相关数据        :param current_page: 当前页        :param all_count:    数据库中的数据总条数        :param per_page_num: 每页显示的数据条数        :param base_url: 分页中显示的URL前缀        :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)    @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/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_end = self.all_pager + 1                    pager_start = self.all_pager - self.pager_count + 1                else:                    pager_start = self.current_page - self.pager_count_half                    pager_end = self.current_page + self.pager_count_half + 1        page_html_list = []        first_page = '
  • 首页
  • ' % (self.base_url,1,) page_html_list.append(first_page) if self.current_page <= 1: prev_page = '
  • 上一页
  • ' else: prev_page = '
  • 上一页
  • ' % (self.base_url,self.current_page - 1,) page_html_list.append(prev_page) for i in range(pager_start, pager_end): if i == self.current_page: temp = '
  • %s
  • ' % (self.base_url,i, i,) else: temp = '
  • %s
  • ' % (self.base_url,i, i,) page_html_list.append(temp) if self.current_page >= self.all_pager: next_page = '
  • 下一页
  • ' else: next_page = '
  • 下一页
  • ' % (self.base_url,self.current_page + 1,) page_html_list.append(next_page) last_page = '
  • 尾页
  • ' % (self.base_url,self.all_pager,) page_html_list.append(last_page) return ''.join(page_html_list)

     

    转载于:https://www.cnblogs.com/iamluoli/p/9050865.html

    你可能感兴趣的文章
    观察者模式
    查看>>
    轻量级IOC容器IOCFactory发布。
    查看>>
    js 关闭当前页面
    查看>>
    OCP笔记部分整理-学习参考
    查看>>
    Fedora 中使用逻辑卷管理器调整LVM分区大小
    查看>>
    IOS TableView Cell重用机制
    查看>>
    label中for属性
    查看>>
    VS2010的快捷键;VS2012变化的快捷键
    查看>>
    Android 音视频开发入门指南
    查看>>
    进程间通信——共享内存
    查看>>
    [Unity]C#中 将XML和实体类之间进行相互转换的工具类
    查看>>
    我的友情链接
    查看>>
    python中的asyncore
    查看>>
    zabbix专题:第二章 zabbix3.0安装详解
    查看>>
    sublime text 快捷收集
    查看>>
    VMware ESXI 5.5 系统安装(6.0)
    查看>>
    python解析Testlink导出的xml并写入excel
    查看>>
    linux环境变量设置
    查看>>
    Puppet3.0原理介绍与安装配置
    查看>>
    时间:2014年3月29日8:55:16 递归与迭代
    查看>>