Django 自定义分页类

分页类代码:

class Page(object):    ‘‘‘    自定义分页类    可以实现Django ORM数据的的分页展示    输出HTML代码:

使用说明:    from utils import mypage        page_obj = mypage.Page(total_num, current_page, ‘publisher_list‘)        publisher_list = data[page_obj.data_start:page_obj.data_end]        page_html = page_obj.page_html()

为了显示效果,show_page_num最好使用奇数    ‘‘‘

def __init__(self, total_num, current_page, url_prefix, per_page=10, show_page_num=9):        ‘‘‘

:param total_num: 数据总条数        :param current_page: 当前访问的页码        :param url_prefix: 分页代码里a标签的前缀        :param per_page: 每一页显示多少数据        :param show_page_num: 页面上最多显示多少个页码

‘‘‘        self.total_num = total_num        self.url_prefix = url_prefix        self.per_page = per_page        self.show_page_num = show_page_num        # 根据传入的值计算当前页码左右放置多少个页码        self.half_show_page_num = self.show_page_num // 2        # 计算当前数据总共需要多少页码        total_page, more = divmod(self.total_num, self.per_page)        # 如果有余数就把页码加1        if more:            total_page += 1        self.total_page = total_page        # 数据有效性校验        try:            current_page = int(current_page)        except Exception as e:            current_page = 1        # 如果当前页码数大于总页码数,默认展示最后一页数据        if current_page > self.total_page:            current_page = self.total_page        # 如果当前页码小于1,默认展示第一页数据        if current_page < 1:            current_page = 1        self.current_page = current_page        # 计算页面上需要展示的页码范围        # 页码过小处理        if self.current_page - self.half_show_page_num <= 1:            page_start = 1            page_end = show_page_num        # 页码过大处理        elif self.current_page + self.half_show_page_num >= self.total_page:            page_end = self.total_page            page_start = self.total_page - self.show_page_num + 1        # 未超过正常范围        else:            page_start = self.current_page - self.half_show_page_num            page_end = self.current_page + self.half_show_page_num

# 计算得到的最终页码数        self.page_start = page_start        self.page_end = page_end        # 如果计算得到的页码数比总共需要展示页码数多,则把页码结束指定为总页码数        if self.page_end > self.total_page:            self.page_end = self.total_page

@property    def data_start(self):        ‘‘‘

:return: 返回当前页面应该从哪里开始切数据        ‘‘‘        return (self.current_page - 1) * self.per_page

@property    def data_end(self):        ‘‘‘

:return: 返回当前页面从哪里结束数据        ‘‘‘        return self.current_page * self.per_page

def page_html(self):        li_list = []        # 添加前面的nav和ul标签        li_list.append("""        <nav aria-label="Page navigation">        <ul class="pagination">        """)        # 添加首页        li_list.append(‘<li><a href="/{}/?page=1">首页</a></li>‘.format(self.url_prefix))        # 添加上一页        if self.current_page <= 1:  # 没有上一页            prev_html = ‘<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>‘        else:            prev_html = ‘<li><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>‘.format(                self.url_prefix,                self.current_page - 1)        li_list.append(prev_html)        # 循环添加内部所有的页码        for i in range(self.page_start, self.page_end + 1):            if i == self.current_page:                tmp = ‘<li class="active"><a href="/{0}/?page={1}">{1}</a></li>‘.format(self.url_prefix, i)            else:                tmp = ‘<li><a href="/{0}/?page={1}">{1}</a></li>‘.format(self.url_prefix, i)            li_list.append(tmp)        # 添加下一页        if self.current_page >= self.total_page:  # 表示没有下一页            next_html = ‘<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>‘        else:            next_html = ‘<li><a href="/{}/?page={}" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>‘.format(                self.url_prefix, self.current_page + 1)        li_list.append(next_html)        # 添加尾页        li_list.append(‘<li><a href="/{}/?page={}">尾页</a></li>‘.format(self.url_prefix, self.total_page))        # 添加结尾nav和ul标签        li_list.append("""        </ul>        </nav>        """)        # 将生成的标签拼接成一个大字符串        page_html = ‘‘.join(li_list)        return page_html

导入文件后调用代码:
# 获取分页所需数据total_num = data.count() # 获取数据总计条数current_page = request.GET.get(‘page‘) # 获取当前页页码url_prefix = request.path_info.strip(‘/‘) # 获取a标签所需参数

# 调用分页类# 调用类传入参数生成实例page_obj = mypage.Page(total_num, current_page, url_prefix, per_page=1)# 按照分页所需数据对总数据进行分割获取当前页面所需展示的数据data = data[page_obj.data_start:page_obj.data_end]# 获取HTML代码page_html = page_obj.page_html()


原文地址:https://www.cnblogs.com/zhaodafa/p/9275491.html

时间: 2024-10-23 10:44:02

Django 自定义分页类的相关文章

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

Django自定义分页、bottle

一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1">1</a>,将page的值传送到函数/user_list/中,后端在user_list中通过request.GET.get('page',1)获取当前页; 3.从数据库中获取特定行的数据,使用result = models.UserList.objects.all()[start:end]获取,

python全栈系列之---自定义分页类

# coding:utf8 # __author: Administrator # date: 2018/3/7 0007 # /usr/bin/env python import tornado.web from math import ceil LIST_INFO =[ {'username':'ld',"email":'[email protected]'}, ] class Pagination: #传入当前页,总条数 def __init__(self,current_pag

[py][mx]django自定义认证类

创建自定义验证用户名密码类CustomBackend users/views.py from django.contrib.auth import authenticate, login from django.contrib.auth.backends import ModelBackend from django.shortcuts import render # Create your views here. from users.models import UserProfile cla

DJANGO 自定义分页组件

第一次在码云上面分享代码片段,记录一下: https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90 class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 传入: # -所有数据的个数 totalCount self.totalCount = totalCount # -当前页 curren

php : 自定义分页类

Page.class.php : <?php namespace Tools; class Page { private $total; //数据表中总记录数 private $listRows; //每页显示行数 private $limit; private $uri; private $pageNum; //页数 private $config = array('header' => "个记录", "prev" => "上一页&qu

自定义分页类代码

/** * 分页效果显示 */ function getPagestr($url, $totalNum, $showNum, $page) { $totalPage = ceil($totalNum / $showNum); $page = intval($_GET['p']); $page = ($page < 1)? 1 : $page; $start = ($page - 1) * $showNum; $prev = $page - 1; $prev = max($prev, 1); $n

python/Djangof分页与自定义分页

python/Djangof分页与自定义分页 Django分页 1 ##============================================分页======================================================= 2 # current_pagc = request.GET.get('page') 3 # from django.core.paginator import Paginator,Page 4 # # result = m

刚写的一个js分页类,未优化

以前也写过,很久以前了,写的很长,并且使用起来也不灵活.这次搞了个灵活版的. /* * SunPage --自定义分页类,仅获取分页的html代码,简单应用 * Sunbt 2015-5-4 * v1.0 * @param current_page int 当前页 * @param totle_page int 总页数 * @param take_num int 当前页左右携带页码数 * @param func_obj obj 分页实现函数 */ var SunPage = function(c