赞
踩
- #!usr/bin/env python
- # -*- coding:utf-8 -*-
- from urllib import urlencode
- class Pagination(object):
- """
- 自定义分页
- """
- def __init__(self, current_page, total_count, base_url, params, per_page_count=10, max_pager_count=11):
- try:
- current_page = int(current_page)
- except Exception as e:
- current_page = 1
- if current_page <=0:
- current_page = 1
- self.current_page = current_page
- # 数据总条数
- self.total_count = total_count
-
- # 每页显示10条数据
- self.per_page_count = per_page_count
-
- # 页面上应该显示的最大页码
- max_page_num, div = divmod(total_count, per_page_count)
- if div:
- max_page_num += 1
- self.max_page_num = max_page_num
-
- # 页面上默认显示11个页码(当前页在中间)
- self.max_pager_count = max_pager_count
- self.half_max_pager_count = int((max_pager_count - 1) / 2)
-
- # URL前缀
- self.base_url = base_url
-
- # request.GET
- import copy
- params = copy.deepcopy(params)
- get_dict = params.to_dict()
-
- self.params = get_dict
-
- @property
- def start(self):
- return (self.current_page - 1) * self.per_page_count
-
- @property
- def end(self):
- return self.current_page * self.per_page_count
-
- def page_html(self):
- # 如果总页数 <= 11
- if self.max_page_num <= self.max_pager_count:
- pager_start = 1
- pager_end = self.max_page_num
- # 如果总页数 > 11
- else:
- # 如果当前页 <= 5
- if self.current_page <= self.half_max_pager_count:
- pager_start = 1
- pager_end = self.max_pager_count
- else:
- # 当前页 + 5 > 总页码
- if (self.current_page + self.half_max_pager_count) > self.max_page_num:
- pager_end = self.max_page_num
- pager_start = self.max_page_num - self.max_pager_count + 1 #倒这数11个
- else:
- pager_start = self.current_page - self.half_max_pager_count
- pager_end = self.current_page + self.half_max_pager_count
-
- page_html_list = []
- # {source:[2,], status:[2], gender:[2],consultant:[1],page:[1]}
- # 首页
- self.params['page'] = 1
- first_page = '<li><a href="%s?%s">首页</a></li>'.decode("utf-8") % (self.base_url,urlencode(self.params),)
- page_html_list.append(first_page)
- # 上一页
- self.params["page"] = self.current_page - 1
- if self.params["page"] < 1:
- pervious_page = '<li class="disabled"><a href="%s?%s" aria-label="Previous">上一页</span></a></li>'.decode("utf-8") % (self.base_url, urlencode(self.params))
- else:
- pervious_page = '<li><a href = "%s?%s" aria-label = "Previous" >上一页</span></a></li>'.decode("utf-8") % ( self.base_url, urlencode(self.params))
- page_html_list.append(pervious_page)
- # 中间页码
- for i in range(pager_start, pager_end + 1):
- self.params['page'] = i
- if i == self.current_page:
- temp = '<li class="active"><a href="%s?%s">%s</a></li>' % (self.base_url,urlencode(self.params), i,)
- else:
- temp = '<li><a href="%s?%s">%s</a></li>' % (self.base_url,urlencode(self.params), i,)
- page_html_list.append(temp)
-
- # 下一页
- self.params["page"] = self.current_page + 1
- if self.params["page"] > self.max_page_num:
- self.params["page"] = self.current_page
- next_page = '<li class="disabled"><a href = "%s?%s" aria-label = "Next">下一页</span></a></li >'.decode("utf-8") % (self.base_url, urlencode(self.params))
- else:
- next_page = '<li><a href = "%s?%s" aria-label = "Next">下一页</span></a></li>'.decode("utf-8") % (self.base_url, urlencode(self.params))
- page_html_list.append(next_page)
-
- # 尾页
- self.params['page'] = self.max_page_num
- last_page = '<li><a href="%s?%s">尾页</a></li>'.decode("utf-8") % (self.base_url, urlencode(self.params),)
- page_html_list.append(last_page)
-
- return ''.join(page_html_list)

- #!usr/bin/env python
- # -*- coding:utf-8 -*-
- from flask import Flask, render_template, request
- from page_utils import Pagination
- app = Flask(__name__)
-
- @app.route('/test')
- def test():
- li = []
- for i in range(1, 100):
- li.append(i)
- pager_obj = Pagination(request.args.get("page", 1), len(li), request.path, request.args, per_page_count=10)
- print(request.path)
- print(request.args)
- index_list = li[pager_obj.start:pager_obj.end]
- html = pager_obj.page_html()
- return render_template("obj/test.html", index_list=index_list, html=html)
-
- if __name__ == '__main__':
- app.run(debug=True)

- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
- <style>
- .container{
- margin-top: 20px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="row " style="margin-top: 10px">
- <ul>
- {% for foo in index_list %}
- <li>{{ foo }}:这是列表内容~~</li>
- {% endfor %}
- </ul>
- <nav aria-label="Page navigation" class="pull-right">
- <ul class="pagination">
- {{ html|safe }}
- </ul>
- </nav>
- </div>
- </div>
- </body>
- </html>

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。