先推一个网页给大家
https://www.cnblogs.com/INnoVationv2/p/5837495.html
我咻咻咻弄出来的分页功能也是基于他的,但因为想法不一样,所以就有一点小变动, 比如说text-align:right-->text-align:center,同时,我的分页功能也是基于我刚才的留言板的,有兴趣的话可以试试。
1.view
1 class PaginateLeave: 2 def __init__(self, page): 3 leave = MongoClient().Doo.Leave.find().sort('words_since',-1) #实用性很高的一个方法——sort() 4 self.total = leave.count() #__len__ --> count,原作者的这里是一个list,而我的是一个colletcion 5 self.pages = int(self.total / 10) #每10个留言一页 6 if self.total % 10 != 0: 7 self.pages += 1 8 if page == -1: 9 self.page = self.pages 10 else: 11 self.page = page 12 if self.page == 1: 13 self.has_prev = False 14 else: 15 self.has_prev = True 16 if self.page == self.pages: 17 self.has_next = False 18 else: 19 self.has_next = True 20 self.next_num = self.page + 1 21 self.per_page = 10 22 self.prev_num = self.page - 1 23 self.current_num = self.total - (10 * (self.page - 1)) 24 if self.current_num > 10: 25 self.current_num = 10 26 self.items = [] 27 for i in range(self.current_num): 28 self.items.append( 29 {'name': leave[self.prev_num * 10 + i].get('name'), 'words': leave[self.prev_num * 10 + i].get('words'), 30 'words_since': leave[self.prev_num * 10 + i].get('words_since')})
#self.items.reverse() #原作者是基于id的,反正如果我用了这个,那顺序肯定就是错的,所以前面先用了sort()
31 32 def iter_pages(self, left_edge=2, left_current=2, 33 right_current=5, right_edge=2): #别拉下这个方法了 34 last = 0 35 for num in range(1, self.pages + 1): 36 if num <= left_edge or \ 37 (self.page - left_current - 1 < num < self.page + right_current) \ 38 or num > self.pages - right_edge: 39 if last + 1 != num: 40 yield None 41 yield num 42 last = num
2.leave.html
1 {% import "_macros.html" as macros %} 2 {% include '_leave.html' %} 3 {% if pagination %} 4 <div class="pagination"> 5 {{ macros.pagination_widget(pagination, '.leave') }} 6 </div> 7 {% endif %} 8 9 </div>
3.基于前面,所以多了两个页面
~1._macros.html(这个我完全没改过)
{% macro pagination_widget(pagination, endpoint) %} <ul class="pagination"> <li{% if not pagination.has_prev %} class="disabled"{% endif %}> <a href="{% if pagination.has_prev %}{{ url_for(endpoint, page=pagination.prev_num, **kwargs) }}{% else %}#{% endif %}"> « </a> </li> {% for p in pagination.iter_pages() %} {% if p %} {% if p == pagination.page %} <li class="active"> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% else %} <li> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% endif %} {% else %} <li class="disabled"><a href="#">…</a></li> {% endif %} {% endfor %} <li{% if not pagination.has_next %} class="disabled"{% endif %}> <a href="{% if pagination.has_next %}{{ url_for(endpoint, page=pagination.next_num, **kwargs) }}{% else %}#{% endif %}"> » </a> </li> </ul> {% endmacro %}
~2._leave.html(把之前的那个content丢进来)
<ul class="leave"> {% for lea in leave %} <div class="content"> <div class="info"> <h4 class="user">By {{ lea.get('name') }}</h4> <h4 class="time">{{ lea.get('words_since').strftime('%Y-%m-%d %H:%M:%S') }}</h4> </div> <div class="con">{{ lea.get('words') }}</div> </div> {% endfor %} </ul>
最后加个css(来自原作者)
.flask-pagedown-preview { margin: 10px 0px 10px 0px; border: 1px solid #e0e0e0; padding: 4px; }
关注点请放在url上和完成的分页导航上。还有,我是液体粉。