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

    你可能感兴趣的文章
    spring xml properties split with comma for list
    查看>>
    判断点是否在三角形内
    查看>>
    Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
    查看>>
    在odl中怎样实现rpc
    查看>>
    leetcode 110 Balanced Binary Tree
    查看>>
    python活用isdigit方法显示系统进程
    查看>>
    项目开发总结
    查看>>
    知行合一
    查看>>
    jmeter插件之jsonpath提取响应结果和做断言
    查看>>
    发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
    查看>>
    Ubuntu ctrl+alt会导致窗口还原的问题
    查看>>
    第四十期百度技术沙龙笔记整理
    查看>>
    推荐系统那点事 —— 基于Spark MLlib的特征选择
    查看>>
    linux 下RTL8723/RTL8188调试记录(命令行)【转】
    查看>>
    SpringMVC案例1——对User表进行CRUD操作
    查看>>
    看雪CTF第十四题
    查看>>
    [Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
    查看>>
    Android 网络编程 记录
    查看>>
    微软同步发行Windows 10和Windows 10 Mobile系统更新
    查看>>
    Maven 传递依赖冲突解决(了解)
    查看>>