分页功能

在app中建立一个pagination.py文件 , 封装在Pagination类中.

class Pagination:

    def __init__(self, page_num, all_count, per_num=15, max_show=11):
		# 输入错误的地址, 默认改为1
        try:
            self.page_num = int(page_num)
            if self.page_num <= 0:      
                self.page_num = 1
        except Exception as e:
            self.page_num = 1
            
        # 总的数据量
        self.all_count = all_count
        # 每页显示的数据条数
        self.per_num = per_num
        # 总页码数
        self.total_page_num, more = divmod(all_count, per_num)
        # 总页数取余数加1
        if more:                
            self.total_page_num += 1

        # 最多显示的页面数
        self.max_show = max_show
        self.half_show = max_show // 2

    @property
    def start(self):
        """
        数据切片的起始值
        :return:
        """
        return (self.page_num - 1) * self.per_num

    @property
    def end(self):
        """
        数据切片的终止值
        :return:
        """
        return self.page_num * self.per_num
	
    # 动态页面, 将数据在后端做校验
    @property
    def page_html(self):                          
        if self.total_page_num < self.max_show:   # 页码数不满足最大显示数
            page_start = 1
            page_end = self.total_page_num
        elif self.page_num <= self.half_show:
            page_start = 1
            page_end = self.max_show
        elif self.page_num + self.half_show > self.total_page_num:
            page_start = self.total_page_num - self.max_show + 1
            page_end = self.total_page_num

        else:
            # 起始的页面
            page_start = self.page_num - self.half_show
            # 终止的页码
            page_end = self.page_num + self.half_show

        page_list = []

        # 上一页
        if self.page_num == 1:
            page_list.append('<li class="disabled" ><a >上一页</a></li>')
        else:
            page_list.append('<li ><a href="?page={}">上一页</a></li>'.format(self.page_num - 1))

        for i in range(page_start, page_end + 1):
            if i == self.page_num:
                page_list.append('<li class="active" ><a href="?page={}">{}</a></li>'.format(i, i))
            else:
                page_list.append('<li><a href="?page={}">{}</a></li>'.format(i, i))
		
        # 下一页
        if self.page_num == self.total_page_num:
            page_list.append('<li class="disabled"><a>下一页</a></li>')
        else:
            page_list.append('<li><a href="?page={}">下一页</a></li>'.format(self.page_num + 1))

        return ''.join(page_list)

view.py中的文件

userlist = [{'name': 'jason-{}'.format(i), 'pwd': 'lucky-{}'.format(i)} for i in range(1, 302)]

from crm.utils.pagination import Pagination

def user_list(request):
    page = Pagination(request.GET.get('page'), len(userlist))
    return render(request, 'user_list.html', {'users': userlist[page.start: page.end], 'page_html': page.page_html})

模板中

<table class="table table-bordered table-hover">
    <tbody>
    {% for user in users %}
        <tr>
        <td>{{ user.name }}</td>
        <td>{{ user.pwd }}</td>
        </tr>
    {% endfor %}
    </tbody>
    </table>

  <ul class="pagination">
    {{ page_html|safe }}
  </ul>
posted @ 2019-07-10 09:11  言值  阅读(84)  评论(0编辑  收藏  举报