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

    你可能感兴趣的文章
    8.3、文件内容处理
    查看>>
    c 的ui
    查看>>
    Unsupported major.minor version 51.0
    查看>>
    C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)
    查看>>
    Delphi 之Inherited详解
    查看>>
    VIM配置
    查看>>
    QT_QML 界面设计Row和Column布局
    查看>>
    千里之行,始于足下
    查看>>
    云服务和虚拟机的预留 IP 地址
    查看>>
    JavaSE学习总结第16天_集合框架2
    查看>>
    12.组合(Composition)
    查看>>
    推荐一位牛人的博客
    查看>>
    C#使用 SSL Socket 建立 Client 与 Server 连接
    查看>>
    ruby之selenium自动化 or ruby爬虫利器-selenium
    查看>>
    倒水问题
    查看>>
    poj - 1860 Currency Exchange
    查看>>
    git的使用(win7 64位)
    查看>>
    通过闭包可以返回局部变量
    查看>>
    UNIX多线程环境下屏障功能(barrier)浅析
    查看>>
    【JS学习】慕课网8-17编程练习 网页的返回与跳转
    查看>>