#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/5/3 10:09
# @Author  : MnCu
# @Site    : 
# @File    : utils.py
# @Software: PyCharm

class Pagination(object):
    '''
    controller 首先创建Pagination对象,然后调用该对象的generate方法生成HTML数据,然后render()
    generate方法会生成一个显示页数为10的分页HTML

    '''
    def __init__(self, entry_length, entrys_per_page, current_page, pre_url, current_page_css='alive'):
        '''
        :param entry_length:   显示条目的长度
        :param current_page:  当前页
        :param pre_url:       显示页的URL前缀
        :param current_page_css:  当前页的css样式
        '''
        page_length, residue = divmod(entry_length, entrys_per_page)
        self.page_length = page_length + 1 if residue > 0 else page_length
        self.current_page = current_page
        assert 0 < current_page <= self.page_length
        self.pre_url = pre_url
        self.current_page_css = current_page_css

    def generate(self):
        html = '<ul>%s' % self.generate_pre_page()
        if self.page_length < 10:
            html += self._generate_range_page(1,self.current_page)
            html += self.generate_current_page()
            html += self._generate_range_page(self.current_page+1, self.page_length+1)
        else:
            if self.current_page <= 5:
                html += self._generate_range_page(1, self.current_page)
                html += self.generate_current_page()
                html += self._generate_range_page(self.current_page+1, 11)
            elif self.current_page <= self.page_length - 5:
                html += self._generate_range_page(self.current_page-4, self.current_page)
                html += self.generate_current_page()
                html += self._generate_range_page(self.current_page+1, self.current_page+6)
            else:
                html += self._generate_range_page(self.page_length-9, self.current_page)
                html += self.generate_current_page()
                html += self._generate_range_page(self.current_page+1, self.page_length+1)
        return html + self.generate_next_page()


    def _generate_range_page(self, start, stop):
        '''生成所给范围的页'''
        html = ''
        for i in range(start, stop):
            url = self.pre_url + str(i)
            html += '<li><a href = "%s">%s</a></li>' % (url, i)
        return html

    def generate_current_page(self):
        return '<li class="%s"><a>%s</a></li>' %(self.current_page_css, self.current_page)

    def generate_pre_page(self):
        '''生成上一页'''
        if self.current_page == 1:
            return ''
        url = self.pre_url + str(self.current_page - 1)
        return '<li><a href = "%s">上一页</a></li>' % url

    def generate_next_page(self):
        '''生成下一页'''
        if self.current_page == self.page_length:
            return ''
        url = self.pre_url + str(self.current_page + 1)
        return '<li><a href = "%s">下一页</a></li>' % url

 

posted on 2017-05-03 13:35  MnCu  阅读(196)  评论(0)    收藏  举报