博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    Node.js 中文学习资料和教程导航
    查看>>
    查找(AVL平衡二叉树)
    查看>>
    spring配置和注解事务同时存在导致的事务嵌套
    查看>>
    AJAX-初学AJAX本地环境配置
    查看>>
    VSCode调试配置
    查看>>
    【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)...
    查看>>
    Linux常用基本命令( rmdir, rm, mv )
    查看>>
    POJ2406 Power Strings(KMP)
    查看>>
    java B2B2C Springcloud电子商城系统-Feign基本使用
    查看>>
    Qtum量子链x2018区块链新经济论坛:区块链基础设施建设发展方向
    查看>>
    Java反射与hook混用反射某支付的方法
    查看>>
    前端性能优化 - Resource Hints 资源预加载
    查看>>
    JavaScript-console的使用_016
    查看>>
    两种方式设置iframe的高度区别
    查看>>
    应用后台省电秘籍——低功耗状态下应用如何正常运行?
    查看>>
    Iterator 和 for...of 循环
    查看>>
    关于iOS 11.x微信连wifi流程中,在Portal页无法拉起微信问题的简单记录
    查看>>
    Python GUI库wxPython官网Hello World示例的逐行解释
    查看>>
    RE·WORK 巅峰对话:深度学习将彻底改变医疗健康领域
    查看>>
    计算机网络物理层
    查看>>