留言板的分页

先推一个网页给大家

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 %}">
            &laquo;
        </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="#">&hellip;</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 %}">
            &raquo;
        </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上和完成的分页导航上。还有,我是液体粉。

猜你喜欢

转载自www.cnblogs.com/neebla/p/9069717.html