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">&laquo;</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">&laquo;</span>
 15            </a>
 16            {% else %}
 17            <a href="{{ url_for(url,number=number-1,**kw) }}" aria-label="Previous">
 18                <span aria-hidden="true">&laquo;</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">&raquo;</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">&raquo;</span>
 71            </a>
 72            {% else %}
 73            <a href="{{ url_for(url,number=number+1,**kw) }}" aria-label="Next">
 74                <span aria-hidden="true">&raquo;</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 %}
作者: honmaple
链接: https://honmaple.me/articles/2016/04/flask实现分页.html
版权: CC BY-NC-SA 4.0 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat
alipay

加载评论