数据库实现分页
offset
使用offset可以实现数据库分页功能
1questions = Questions.query.offset(num) # 从num开始
limit
使用limit实现限制每页的文章数量
1questions = Questions.query.offset(num).limit(6) #每页显示6篇文章
前端实现分页
需求设计
是使用上一页,下一页,用表单进行跳转,还是使用数字显示
获得文章数量 pages,和当前页码 number
简单的上一页,下一页
因为我的设计不是这个,所以简单说一下
下一页,上一页
jinja2 代码
1<a href="{{ url_for('blog.index',number=number + 1)}}">下一页</a>
2<a href="{{ url_for('blog.index',number=number - 1)}}">下一页</a>
首页没有上一页,尾页没有下一页
1{% if number == pages %}
2no next page
3{% else %}
4 <a href="{{ url_for('blog.index',number=number + 1)}}">下一页</a>
5{% endif %}
6{% if number == 1 %}
7no previous page
8{% else %}
9 <a href="{{ url_for('blog.index',number=number - 1)}}">上一页</a>
10{% endif %}
显示各个页码的分页
搞了一下午,终于搞定了
设计
总页码小于7,显示所有页码,总页码大于7,显示当前页码以及当前页码前两页和后两页. 当页码大于7时,当前页码小于4,显示1~6页的页码·····
使用
1{{ import 'base/page.html' as page }}
2number为当前页码,pages为总共的页码
3{{ page.page('blog.index',number=number,pages=pages)}}
4如果url_for需要加参数,使用
5{{ page.page('blog.index',number=number,pages=pages,kw=dict(tag=tag))}}
源码
给出源码
1{% macro page(url,number=1,pages=1,kw=None) -%}
2<div style="text-align:center;margin-top:-15px">
3 <ul class="pagination">
4 {%- if number == 1 %}
5 <li class="disabled">
6 <a aria-label="Previous">
7 <span aria-hidden="true">«</span>
8 </a>
9 </li>
10 {%- else -%}
11 <li>
12 {% if not kw %}
13 <a href="{{ url_for(url,number=number-1) }}" aria-label="Previous">
14 <span aria-hidden="true">«</span>
15 </a>
16 {% else %}
17 <a href="{{ url_for(url,number=number-1,**kw) }}" aria-label="Previous">
18 <span aria-hidden="true">«</span>
19 </a>
20 {% endif -%}
21 </li>
22 {% endif -%}
23
24 {% if pages < 7 %}
25 {% for page in range(1,pages + 1) %}
26 {{ page_url(url,page,number,kw) }}
27 {% endfor %}
28 {% else %}
29 {% if number <= 4 %}
30 {% for page in range(1,6) %}
31 {{ page_url(url,page,number,kw) }}
32 {% endfor %}
33
34 {%- if number <= pages - 2 %}
35 <li class="disabled"><a>···</a></li>
36 {%- endif -%}
37
38 {{ page_url(url,pages,number,kw) }}
39 {% else %}
40 {{ page_url(url,1,number,kw) }}
41 {{ page_url(url,2,number,kw) }}
42 {{ page_dot_start(number)}}
43
44 {% if number >= pages - 3 %}
45 {% for page in range(number-2,pages + 1) %}
46 {{ page_url(url,page,number,kw) }}
47 {% endfor %}
48 {% else %}
49 {% for page in range(number-2,number + 3) %}
50 {{ page_url(url,page,number,kw) }}
51 {% endfor %}
52 {{ page_dot_end(pages,number) }}
53 {{ page_url(url,pages,number,kw) }}
54 {% endif %}
55
56 {% endif %}
57 {% endif %}
58
59
60 {%- if number == pages %}
61 <li class="disabled">
62 <a aria-label="Next">
63 <span aria-hidden="true">»</span>
64 </a>
65 </li>
66 {%- else -%}
67 <li>
68 {% if not kw %}
69 <a href="{{ url_for(url,number=number+1) }}" aria-label="Next">
70 <span aria-hidden="true">»</span>
71 </a>
72 {% else %}
73 <a href="{{ url_for(url,number=number+1,**kw) }}" aria-label="Next">
74 <span aria-hidden="true">»</span>
75 </a>
76 {% endif -%}
77 </li>
78 {% endif -%}
79 </ul>
80</div>
81{% endmacro %}
82
83{% macro page_url(url,page,number,kw) -%}
84{%- if page == number %}
85<li class="active">{{ page_kw(url,page,kw)}}</li>
86{%- else -%}
87<li>{{ page_kw(url,page,kw)}}</li>
88{%- endif -%}
89{% endmacro %}
90
91{% macro page_dot_end(pages,number) -%}
92{%- if number <= pages - 4 %}
93<li class="disabled"><a>···</a></li>
94{%- endif -%}
95{% endmacro %}
96
97{% macro page_dot_start(number) -%}
98{%- if number > 5 %}
99<li class="disabled"><a>···</a></li>
100{%- endif -%}
101{% endmacro %}
102
103{% macro page_kw(url,page,kw) -%}
104{% if not kw %}
105<a href="{{ url_for(url,number=page) }}">{{ page }}</a>
106{% else %}
107<a href="{{ url_for(url,number=page,**kw) }}">{{ page }}</a>
108{%- endif -%}
109{% endmacro %}
知识共享署名-非商业性使用-相同方式共享4.0国际许可协议