flask实现分页
数据库实现分页
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 %}
