测试版本

代码:

# 测试分页users=[{'name':'alex{}'.format(i),'pwd':'aaa{}'.format(i)}for i in range(1,302)]

def user_list(request):        # 获取当前页码值 并处理异常 输入字母也显示第一页  默认为第一页    try:        current_page=int(request.GET.get('page',1))        # 如果小于o 显示页面为1        if current_page<=0:            current_page=1    except Exception as e:        current_page=1#     最多显示页码数    max_show=11    half_show=max_show//2

#每页显示数量    per_num=10#         总数量    all_count=len(users)#     总页数    total_num,more=divmod(all_count,per_num)#     判断是否有剩余的    if more:        total_num +=1

    #总页面数小于最大显示数: 显示总页码数    if total_num<max_show:        page_start= 1        page_end=total_num    #总页面数大于最大显示数: 显示总页码数    else:        # 当前页面数 小于一半        if current_page<=half_show:            page_start=1            page_end=max_show        # 当前页面数加一半 大于总页面数        elif current_page +half_show >=total_num:            page_end = total_num            page_start=total_num -max_show +1        else:            page_start=current_page - half_show            page_end=current_page +half_show        # 存放li标签的列表    html_list=[]    #     写首页 直接跳转    first_li='<li><a href="/crm/user_list/?page=1">首页</a></li>'    html_list.append(first_li)    # 添加点击到第一页 不能点    if current_page ==1:        prev_li='<li class="disabled"><a><<</a></li>'    #  可以点击上一页    else:        prev_li='<li><a href="/crm/user_list/?page={0}"><<</a></li>'.format(current_page - 1)    html_list.append(prev_li)

    # 循环 分页 在后端添加样式再传到前端    for num in range(page_start,page_end+1):        # 给当前页面加样式        if current_page==num:            li_html='<li class="active"><a href="/crm/user_list/?page={0}">{0}</a></li>'.format(num)        #     否则不加        else:            li_html = '<li ><a href="/crm/user_list/?page={0}">{0}</a></li>'.format(num)        html_list.append(li_html)

    # 添加点击到最后一页 不能点    if current_page==total_num:        next_li='<li class="disabled"><a>>></a></li>'        #  可以点击下一页    else:        next_li = '<li><a href="/crm/user_list/?page={0}">>></a></li>'.format(current_page + 1)    html_list.append(next_li)        #     写尾页 直接跳转    last_li = '<li><a href="/crm/user_list/?page={}">尾页</a></li>'.format(total_num)    html_list.append(last_li)    #在前端显示全部界面\

    html_str=mark_safe(''.join(html_list))

    # 获取切片起始值  current_page为页数,因为是切片取第一页要从零开始 要减一    start=(current_page-1)*per_num    # 获取切片终止值    end=current_page *per_num

    return render(request,'user_list.html',                  {'data':users[start:end],                   # 'total_num':range(page_start,page_end+1)                   'html_str': html_str                   }                  )html代码:(里面有模板与继成)
{% extends 'board/base.html' %}

{% block conten %}

    <table class="table table-bordered">        <thead>        <tr>            <th>序号</th>            <th>用户名</th>            <th>密码</th>        </tr>        </thead>        <tbody>        {% for user in data %}            <tr>                <td>{{ forloop.counter }}</td>                <td>{{ user.name }}</td>                <td>{{ user.pwd }}</td>            </tr>        {% endfor %}

        </tbody>    </table>

    <nav aria-label="Page navigation">        <ul class="pagination">{#            {% for num in total_num %}#}{#                <li><a href="/crm/user_list/?page={{ num }}">{{ num }}</a></li>{% endfor %}#}

            {#            {% for num in total_num %}#}            {#                <li><a href="/user_list/?page={{ num }}">{{ num }}</a></li>#}            {#            {% endfor %}#}            {#            {{ html_str|safe }}#}            {{ html_str }}        </ul>    </nav>

{% endblock %}

自己定义类 现在项目同级建一个 utils的文件夹  里面创建pagination.pypagination.py代码:
# 分页器from django.utils.safestring import mark_safe

class Pagination:    def  __init__(self,request,all_count,per_num=10, max_show=11):        # 基本的URL        self.base_url=request.path_info        try:            self.current_page=int(request.GET.get('page',1))            # 如果小于o 显示页面为1            if self.current_page<=0:                self.current_page=1        except Exception as e:            self.current_page=1    #     最多显示页码数        self.max_show=max_show        half_show=max_show//2

    #每页显示数量        self.per_num=per_num    #         总数量        self.all_count=all_count    #     总页数

        self.total_num,more=divmod(all_count,per_num)    #     判断是否有剩余的        if more:            self.total_num +=1

        #总页面数小于最大显示数: 显示总页码数        if self.total_num<max_show:            self.page_start=1            self.page_end=self.total_num        #总页面数大于最大显示数: 显示总页码数        else:            # 当前页面数 小于一半            if self.current_page<=half_show:                self.page_start=1                self.page_end=max_show            # 当前页面数加一半 大于总页面数            elif self.current_page +half_show >=self.total_num:                self.page_end = self.total_num                self.page_start=self.total_num -max_show +1            else:                self.page_start=self.current_page - half_show                self.page_end=self.current_page +half_show

    @property    def start(self):        # 获取切片起始值  current_page为页数,因为是切片取第一页要从零开始 要减一

        return (self.current_page - 1) * self.per_num    @property    def end(self):        # 获取切片终止值

        return self.current_page * self.per_num    @property    def show_li(self):        # 存放li标签的列表        html_list = []        #     写首页 直接跳转        first_li = '<li><a href="{}?page=1">首页</a></li>'.format(self.base_url)        html_list.append(first_li)        # 添加点击到第一页 不能点        if self.current_page == 1:            prev_li = '<li class="disabled"><a><<</a></li>'        #  可以点击上一页        else:            prev_li = '<li><a href="{1}?page={0}"><<</a></li>'.format(self.current_page - 1,self.base_url)        html_list.append(prev_li)

        # 循环 分页 在后端添加样式再传到前端        for num in range(self.page_start, self.page_end + 1):            # 给当前页面加样式            if self.current_page == num:                li_html = '<li class="active"><a href="{1}?page={0}">{0}</a></li>'.format(num,self.base_url)            #     否则不加            else:                li_html = '<li ><a href="{1}?page={0}">{0}</a></li>'.format(num,self.base_url)            html_list.append(li_html)

        # 添加点击到最后一页 不能点        if self.current_page == self.total_num:            next_li = '<li class="disabled"><a>>></a></li>'            #  可以点击下一页        else:            next_li = '<li><a href="{1}?page={0}">>></a></li>'.format(self.current_page + 1,self.base_url)        html_list.append(next_li)        #     写尾页 直接跳转        last_li = '<li><a href="{1}?page={0}">尾页</a></li>'.format(self.total_num,self.base_url)        html_list.append(last_li)        # 在前端显示全部界面\

        return mark_safe(''.join(html_list))
views.py代码:
from utils.pagination import Pagination
# 客户展示页面def page(request):    ret_all=models.Customer.objects.all()    # 接收数据的次数    pagee = Pagination(request,ret_all.count())    return render(request,'board/page.html',{'ret':ret_all[pagee.start:pagee.end],'pagination':pagee.show_li                })
# 测试分页users=[{'name':'alex{}'.format(i),'pwd':'aaa{}'.format(i)}for i in range(1,302)]
def user_list(request):    page=Pagination(request,len(users))

    return render(request, 'user_list.html',                  {'data': users[page.start:page.end],                   # 'total_num':range(page_start,page_end+1)                   'html_str': page.show_li                   }                  )
html.py代码:
{% extends 'board/base.html' %}

{% block conten %}      <h2 class="sub-header">客户信息 </h2>          <div class="table-responsive">            <table class="table table-striped table-hover table-bordered">              <thead>                <tr>                    <th>序号</th>                  <th>QQ</th>                  <th>QQ昵称</th>                  <th>姓名</th>                  <th>性别</th>                    <th>手机号</th>                    <th>客户来源</th>                    <th>咨询课程</th>                    <th>班级类型</th>                    <th>状态</th>                    <th>最后跟进日期</th>                    <th>预计再次跟进时间</th>                    <th>销售</th>                  <th>已报班级</th>                </tr>              </thead>              <tbody>              {% for i in ret %}               <tr>                  <td>{{ forloop.counter }}</td>                   <th>{{ i.qq }}</th>                  <th>{{ i.qq_name|default:'暂无' }}</th>                  <th>{{ i.name|default:'暂无' }}</th>                  <th>{{ i.get_sex_display }}</th>                    <th>{{ i.phone|default:'暂无' }}</th>                    <th>{{ i.get_source_display }}</th>                   <th>{{ i.course }}</th>                    <th>{{ i.get_class_type_display }}</th>                    <th>{{ i.show_status }}                    </th>                    <th>{{ i.last_consult_date }}</th>                   <th>{{ i.next_date }}</th>                   <th>{{ i.consultant|default:'暂无' }}</th>                  <th>{{ i.show_class }}</th>                </tr>              {% endfor %}

              </tbody>            </table>          <div style="text-align: right">              <nav aria-label="Page navigation">        <ul class="pagination">

            {{ pagination }}        </ul>    </nav>          </div>     </div>{% endblock  %}
 




												

django项目分页的更多相关文章

  1. 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程

    点击了解更多Python课程>>> 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程 适用人群: 即将毕业的大学生,工资低工作重的白领,渴望崭露头角的职场新人, ...

  2. Django项目纪要

    开发流程 公司高层 项目立项 | 市场部门 需求分析-->需求分析说明书, 需求规格说明书 | 产品部门 产品原型-->产品 UI 前端 后端 测试 移动端 | |------------ ...

  3. vue项目和django项目交互补充,drf介绍,restful规范

    目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. web接口(WEB API) 4. restf ...

  4. Django项目-个人网站之投票模块

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  5. Django DRF 分页

    Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...

  6. 1.-Django项目结构

    一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,视图V和模版T.   Django基本组件: 1.基本配置文件/路由系统 2. ...

  7. centos7 apache httpd安装和配置django项目

    一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...

  8. 终端指令操作创建Django项目

    需求:通过Django创建一个用户表和权限表. 用户表包括:用户名,邮箱,密码,管理权限. 权限表包括:普通用户,管理用户,超级用户. 权限表和用户表有一对多的关系,即用户表中的每条数据对应权限表中的 ...

  9. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

随机推荐

  1. 高并发中nginx较优的配置

    一.这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: 1.nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数. wor ...

  2. BZOJ4481: [Jsoi2015]非诚勿扰【概率期望+树状数组】

    Description [故事背景] JYY赶上了互联网创业的大潮,为非常勿扰开发了最新的手机App实现单身 大龄青年之间的"速配".然而随着用户数量的增长,JYY发现现有速配的算 ...

  3. 51Nod 1009:1009 数字1的数量 (思维)

    1009 数字1的数量  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的 ...

  4. mysql完整版

    mysql: dbs 数据库系统 bdms 数据库管理系统 bda 数据库管理员 db 数据库 dba通过dbms来操作db! 关系型数据库和非关系型数据库 登录mysql mysql -h主机地址 ...

  5. Stones 优先队列

    Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning and walk ...

  6. laravel记住登录、设置时间

    laravel 自动登陆的时间改如何实现? 控制器 public function login(){ $email =Input::get('email');$password  = Input::g ...

  7. 剑指offer-int类型负数补码中1的个数-位操作

    在java中Interger类型表示的最大数是 System.out.println(Integer.MAX_VALUE);//打印最大整数:2147483647 这个最大整数的二进制表示,头部少了一 ...

  8. java安全性-引用-分层-解耦

    Java不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用 "特洛伊"木马等欺骗手段访问对象的私有成员 访问一个对象必须通过这个对象的引用 java ...

  9. MySQL--区分表名大小写

    ============================================================================ 在MySQL中,可以通过lower_case_ ...

  10. 调用飞信HTTP接口给自己发短信

    注: 1.下文中所有HTTP请求所指的Host都是f.10086.cn 2.目前只有中国移动用户可以使用 1.打开登录页面:GET /huc/user/space/login.do?m=submit& ...