flask实现分页

原文地址
数据库实现分页
offset:使用offset可以实现数据库分页功能
questions = Questions.query.offset(num) #从num开始

limit:使用limit实现限制每页的文章数量
questions = Questions.query.offset(num).limit(6) #每页显示6篇文章

前端实现分页
需求设计
是使用上一页,下一页,用表单进行跳转,还是使用数字显示
获得文章数量 pages,和当前页码 number
简单的上一页,下一页
因为我的设计不是这个,所以简单说一下
下一页,上一页
jinja2 代码

<a href="{{ url_for('blog.index',number=number + 1)}}">上一页</a>
<a href="{{ url_for('blog.index',number=number - 1)}}">下一页</a>

首页没有上一页,尾页没有下一页

{% if number == pages %}
no next page
{% else %}
 <a href="{{ url_for('blog.index',number=number + 1)}}">下一页</a>
{% endif %}
{% if number == 1 %}
no previous page
{% else %}
 <a href="{{ url_for('blog.index',number=number - 1)}}">上一页</a>
{% endif %}

显示各个页码的分页
搞了一下午,终于搞定了
设计
总页码小于7,显示所有页码,总页码大于7,显示当前页码以及当前页码前两页和后两页. 当页码大于7时,当前页码小于4,显示1~6页的页码·····
使用

{{ import 'base/page.html' as page }}
number为当前页码,pages为总共的页码
{{ page.page('blog.index',number=number,pages=pages)}}
如果url_for需要加参数,使用
{{ page.page('blog.index',number=number,pages=pages,kw=dict(tag=tag))}}

源码
给出源码

{% macro page(url,number=1,pages=1,kw=None) -%}
<div style="text-align:center;margin-top:-15px">
    <ul class="pagination">
        {%- if number == 1 %}
        <li class="disabled">
            <a aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
        </li>
        {%- else -%}
        <li>
            {% if not kw %}
            <a href="{{ url_for(url,number=number-1) }}" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
            {% else %}
            <a href="{{ url_for(url,number=number-1,**kw) }}" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
            {% endif -%}
        </li>
        {% endif -%}

        {% if pages < 7 %}
        {% for page in range(1,pages + 1) %}
        {{ page_url(url,page,number,kw) }}
        {% endfor %}
        {% else %}
        {% if number <= 4 %}
        {% for page in range(1,6) %}
        {{ page_url(url,page,number,kw) }}
        {% endfor %}

        {%- if number <= pages - 2 %}
        <li class="disabled"><a>···</a></li>
        {%- endif -%}

        {{ page_url(url,pages,number,kw) }}
        {% else %}
        {{ page_url(url,1,number,kw) }}
        {{ page_url(url,2,number,kw) }}
        {{ page_dot_start(number)}}

        {% if number >= pages - 3 %}
        {% for page in range(number-2,pages + 1) %}
        {{ page_url(url,page,number,kw) }}
        {% endfor %}
        {% else %}
        {% for page in range(number-2,number + 3) %}
        {{ page_url(url,page,number,kw) }}
        {% endfor %}
        {{ page_dot_end(pages,number) }}
        {{ page_url(url,pages,number,kw) }}
        {% endif  %}

        {% endif  %}
        {% endif  %}


        {%- if number == pages %}
        <li class="disabled">
            <a aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
        </li>
        {%- else -%}
        <li>
            {% if not kw %}
            <a href="{{ url_for(url,number=number+1) }}" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
            {% else %}
            <a href="{{ url_for(url,number=number+1,**kw) }}" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
            {% endif -%}
        </li>
        {% endif -%}
    </ul>
</div>
{% endmacro %}

{% macro page_url(url,page,number,kw) -%}
{%- if page == number %}
<li class="active">{{ page_kw(url,page,kw)}}</li>
{%- else -%}
<li>{{ page_kw(url,page,kw)}}</li>
{%- endif -%}
{% endmacro %}

{% macro page_dot_end(pages,number) -%}
{%- if number <= pages - 4 %}
<li class="disabled"><a>···</a></li>
{%- endif -%}
{% endmacro %}

{% macro page_dot_start(number) -%}
{%- if number > 5 %}
<li class="disabled"><a>···</a></li>
{%- endif -%}
{% endmacro %}

{% macro page_kw(url,page,kw) -%}
{% if not kw %}
<a href="{{ url_for(url,number=page) }}">{{ page }}</a>
{% else %}
<a href="{{ url_for(url,number=page,**kw) }}">{{ page }}</a>
{%- endif -%}
{% endmacro %}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 方法一:使用pure_pagination进行分页 1. pure_pagination介绍 pure_pagin...
    Jlan阅读 1,116评论 0 7
  • 本文包括:1、分页技术概述2、实现分页3、完善分业——分页工具条4、几种常见的分页工具条 1、分页技术概述 物理分...
    廖少少阅读 4,424评论 0 38
  • 作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:ww...
    吾非言阅读 1,116评论 0 1
  • 提到分页,大家都不陌生,在我们日常浏览网页时常遇到,尤其新闻文章列表等都有分页,如下图所示: 下面,通过一个实例为...
    我爱一碗香阅读 1,951评论 9 21
  • 一、需求缘起 分页需求 互联网很多业务都有分页拉取数据的需求,例如: (1)微信消息过多时,拉取第N页消息 (2)...
    duzhongli阅读 446评论 0 3