打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
django分页

django实现分页的两种形式

一、django内置方法实现分页

django自带的分页不能设置样式

def domen(request):    # for i in range(101):    #     models.DataInfo.objects.create(name="root_%s"%i,phone=11111)#获取url中cur_page的参数    cur_page=request.GET.get('cur_page')    cur_page=int(cur_page)    data_list=models.DataInfo.objects.all()    from django.core.paginator import Paginator    paginatos=Paginator(data_list,10)    # per_page: 每页显示条目数量    # count:    数据总个数    # num_pages:总页数    # page_range:总页数的索引范围,如: (1,10),(1,200)    # page:     page对象        # res=paginatos.count    # res=paginatos.num_pages    # res=paginatos.page_range    # res=paginatos.page(2).number    users=paginatos.page(cur_page)    # has_next              是否有下一页    # next_page_number      下一页页码    # has_previous          是否有上一页    # previous_page_number  上一页页码    # object_list           分页之后的数据列表    # number                当前页    # paginator             paginator对象    return render(request,'domen.html',{"users":users})
<div class="box">    <ul>        {% for user in users %}            <li>            {{ user.name }}        {% endfor %}        </li>    </ul>{#获取上一页#}{% if users.has_previous %}    <a href="/domen/?cur_page={{ users.previous_page_number }}">上一页</a>{% endif %}{#获取页码#}{% for num in users.paginator.page_range %}    <a href="/domen/?cur_page={{ num }}">{{ num }}</a>{% endfor %}{#获取下一页#}{% if users.has_next %}    <a href="/domen/?cur_page={{ users.next_page_number }}">下一页</a>{% endif %}</div>

二、自定义页面分页

1、处理页数的方法

class PageInfo:    '''页数处理类'''    #total  总的数据为列表套对象    #cur_page  前端发过来的当前页码    #per_page  一页展示的数据的条数    #show_page  显示页面下端页码显示的数目    def __init__(self,total,cur_page,per_page=10,show_page=11):        a,b=divmod(total,per_page)        if b!=0:            a =1        self.total=total        self.cur_page=cur_page        self.per_page=per_page        self.show_page=show_page        self.total_page_num=a        #获取数据库查询的起始位置        self.start = (cur_page - 1) * per_page        #获取数据库的结束位置        self.end = self.start   per_page        #获取当前页起始数据的位置    def get_start_num(self):        return self.start        #获取数据库结束数据的位置    def get_end_num(self):        return self.end    def get_page(self):        #获得距离当前页的数量,用于展示页数多少        step=self.show_page//2        #展示页起始点        begin=self.cur_page-step        off = self.cur_page   step        #判断开始页是否小于0等于0,或小于等于0,开始开始页始终设置为1        if begin<=0:            begin=1        #判断最后的几页是否还凑步数        elif self.total_page_num-self.cur_page<=step:            off=self.total_page_num        #判断若总的页数小于需要展示的页数        if self.total_page_num<self.show_page:            off=self.total_page_num        lis=[]        #判断当前页是否为第一页,若为第一次就不能点击上一页        if self.cur_page-1<=0:            str="<li><a href='#'><span aria-hidden='true'>&laquo;</span></a></li>"        else:            str="<li><a href='/index/?cur_page=%s' aria-label='Previous'><span aria-hidden='true'>&laquo;</span></a></li>"%(self.cur_page-1)        lis.append(str)        #遍历获取页数标签        for index in range(begin,off 1):            if self.cur_page==index:                str="<li><a href='/index/?cur_page=%s' style='background:blue;color:white;'>%s</a></li>"%(index,index)            else:                str="<li><a href='/index/?cur_page=%s'>%s</a></li>"%(index,index)            lis.append(str)        if self.cur_page>=self.total_page_num:            str="<li><a href='#'><span aria-hidden='true'>&raquo;</span></a></li>"        else:            str="<li><a href='/index/?cur_page=%s' aria-label='Previous'><span aria-hidden='true'>&raquo;</span></a></li>"%(self.cur_page 1)        lis.append(str)        s=" ".join(lis)        return s

2、分页处理模型类

class IndexPage(View):    '''分页模型类'''    def get(self,request):        #获取当前页这里是字符创格式        cur_page=request.GET.get('cur_page')        #将字符创格式的cur_page转化成数字类型        cur_page=int(cur_page)        # total=models.DataInfo.objects.all()[0:10]                #获取数据库数据总数量        total=models.DataInfo.objects.filter(id__lt=40).count()        #实例化页数处理类的对象        page_obj=PageInfo(total,cur_page)        start=page_obj.get_start_num()        end=page_obj.get_end_num()                #对数据库查出的数据进行切片        users=models.DataInfo.objects.all()[start:end]        s=page_obj.get_page()        return render(request,'index.html',{"user_lis":users,"page":s})

3、分页模板

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"      integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va PmSTsz/K68vbdEjh4u" crossorigin="anonymous"><style>    .page{        text-align: center;    }</style><table class="table-bordered table">    <p class="btn btn-primary">欢迎光临</p>    <thead>    <tr>        <th>ID</th>        <th>姓名</th>        <th>电话</th>    </tr>    </thead>    <tbody>    {% for user in user_lis %}        <tr>            <td>{{ user.id }}</td>            <td>{{ user.name }}</td>            <td>{{ user.phone }}</td>        </tr>    {% endfor %}    </tbody></table><div class="page">        <nav aria-label="Page navigation">            <ul class="pagination">                {{ page | safe }}            </ul>        </nav>    </div>
来源:https://www.icode9.com/content-4-392701.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
python测试开发django-116.Paginator分页器页数大时显示省略号...
django 分页
Django高效率分页方法
Django——完美的分页器
django 分页加序号
基于Django+Bootstrap框架,设计微型小说网站
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服