博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几个实现分页的方法
阅读量:5883 次
发布时间:2019-06-19

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

自定义方法

def user_list(request):    # user_list = data[0:10]    # user_list = data[10:20]    try:        current_page = int(request.GET.get("page"))    except Exception as e:        current_page = 1    per_page = 10    # 数据总条数    total_count = len(data)    # 总页码    total_page, more = divmod(total_count, per_page)    if more:        total_page += 1    # 页面最多显示多少个页码    max_show = 11    half_show = int((max_show-1)/2)    if current_page <= half_show:        show_start = 1        show_end = max_show    else:        if current_page + half_show >= total_page:            show_start = total_page - max_show            show_end = total_page        else:            show_start = current_page - half_show            show_end = current_page + half_show    # 数据库中获取数据    data_start = (current_page - 1) * per_page    data_end = current_page * per_page    user_list = data[data_start:data_end]    # 生成页面上显示的页码    page_html_list = []    # 加首页    first_li = '
  • 首页
  • ' page_html_list.append(first_li) # 加上一页 if current_page == 1: prev_li = '
  • 上一页
  • ' else: prev_li = '
  • 上一页
  • '.format(current_page - 1) page_html_list.append(prev_li) for i in range(show_start, show_end+1): if i == current_page: li_tag = '
  • {0}
  • '.format(i) else: li_tag = '
  • {0}
  • '.format(i) page_html_list.append(li_tag) # 加下一页 if current_page == total_page: next_li = '
  • 下一页
  • ' else: next_li = '
  • 下一页
  • '.format(current_page+1) page_html_list.append(next_li) # 加尾页 page_end_li = '
  • 尾页
  • '.format(total_page) page_html_list.append(page_end_li) page_html = "".join(page_html_list) return render(request, "user_list.html", {
    "user_list": user_list, "page_html": page_html})
    基础版
    class Pagination(object):    def __init__(self, current_page, total_count, base_url, per_page=10, max_show=11):        """        :param current_page: 当前页        :param total_count: 数据库中数据总数        :param per_page: 每页显示多少条数据        :param max_show: 最多显示多少页        """        try:            current_page = int(current_page)        except Exception as e:            current_page = 1        self.current_page = current_page        self.total_count = total_count        self.base_url = base_url        self.per_page = per_page        self.max_show = max_show        # 总页码        total_page, more = divmod(total_count, per_page)        if more:            total_page += 1                half_show = int((max_show - 1) / 2)        self.half_show = half_show        self.total_page = total_page    @property    def start(self):        return (self.current_page - 1) * self.per_page    @property    def end(self):        return self.current_page * self.per_page    def page_html(self):        if self.current_page <= self.half_show:            show_start = 1            show_end = self.max_show        else:            if self.current_page + self.half_show >= self.total_page:                show_start = self.total_page - self.max_show                show_end = self.total_page            else:                show_start = self.current_page - self.half_show                show_end = self.current_page + self.half_show                # 生成页面上显示的页码        page_html_list = []        # 加首页        first_li = '
  • 首页
  • '.format(self.base_url) page_html_list.append(first_li) # 加上一页 if self.current_page == 1: prev_li = '
  • 上一页
  • ' else: prev_li = '
  • 上一页
  • '.format(self.base_url, self.current_page - 1) page_html_list.append(prev_li) for i in range(show_start, show_end + 1): if i == self.current_page: li_tag = '
  • {1}
  • '.format(self.base_url, i) else: li_tag = '
  • {1}
  • '.format(self.base_url, i) page_html_list.append(li_tag) # 加下一页 if self.current_page == self.total_page: next_li = '
  • 下一页
  • ' else: next_li = '
  • 下一页
  • '.format(self.base_url, self.current_page + 1) page_html_list.append(next_li) # 加尾页 page_end_li = '
  • 尾页
  • '.format(self.base_url, self.total_page) page_html_list.append(page_end_li) return "".join(page_html_list)
    封装保存版

    注意:需要自定义一个工具文件夹存放

    from utils import mypagedef user_list(request):    pager = Pagination(request.GET.get("page"), len(data), request.path_info)    user_list = data[pager.start:pager.end]    page_html = pager.page_html()    return render(request, "user_list.html", {
    "user_list": user_list, "page_html": page_html})
    封装保存版使用指南

    Djangon内置分页

    from django.shortcuts import renderfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerL = []for i in range(999):    L.append(i)def index(request):    current_page = request.GET.get('p')    paginator = Paginator(L, 10)    # per_page: 每页显示条目数量    # count:    数据总个数    # num_pages:总页数    # page_range:总页数的索引范围,如: (1,10),(1,200)    # page:     page对象    try:        posts = paginator.page(current_page)        # has_next              是否有下一页        # next_page_number      下一页页码        # has_previous          是否有上一页        # previous_page_number  上一页页码        # object_list           分页之后的数据列表        # number                当前页        # paginator             paginator对象    except PageNotAnInteger:        posts = paginator.page(1)    except EmptyPage:        posts = paginator.page(paginator.num_pages)    return render(request, 'index.html', {
    'posts': posts})
    内置分页view部分
        
      {
      % for item in posts %}
    • {
      { item }}
    • {
      % endfor %}
    内置分页HTML部分

    内置分页实现的样式没有自定义的丰富,使用起来也没有自定义的方便,自定义的可以作为一个工具,随时调用。

     

    转载于:https://www.cnblogs.com/DI-DIAO/p/8728093.html

    你可能感兴趣的文章
    CentOS7_LAMP-https-discuz搭建,WordPress搭建及phpMyadmin搭建_2015091902
    查看>>
    postgres 定期备份shell
    查看>>
    写在C#.NET通用权限管理系统组件源码销售额突破(23000元/月)大关,客户数量超过156人...
    查看>>
    大哥你都有房子有车子还拿着双份工资收入,不能总想让兄弟免费来杭州帮忙啊,开不来这个口啊...
    查看>>
    响应式网页设计:web产品RWD概念
    查看>>
    RHCE_LAB(2)SSH远程登录自动验证(不输入用户登录密码)的实现
    查看>>
    Linux命令之uniq
    查看>>
    vlan技术与单臂路由
    查看>>
    Java基础方面二
    查看>>
    Tomcat部署Web应用方法总结
    查看>>
    swift篇第五期:UITableView,OC与Swift互调
    查看>>
    我的友情链接
    查看>>
    【设计模式与Android】工厂方法模式——化工女神的工厂
    查看>>
    总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景
    查看>>
    用 jupyter notebook 打开 oui.txt 文件出现的问题及解决方案
    查看>>
    Linux 常用命令
    查看>>
    C语言集成开发环境vs2017的使用技巧之修改快捷键
    查看>>
    4.1 df命令;4.2 du命令;4.3——4.4 磁盘分区
    查看>>
    无线路由器使用交换机模式上网不稳定
    查看>>
    shell脚本相关
    查看>>