专栏首页python3python flask 的分页使用

python flask 的分页使用

1、views 如下示例代码:

@admin.route("/account/list/<int:page>/", methods=["GET"])
@admin_login_req
def account_list(page=None):
    if page is None:
        page = 1
    page_data = Account.query.order_by(
        Account.name.desc()
    ).paginate(page=page, per_page=10)
    return render_template('admin/account_list.html', page_data=page_data)

2、模板 account_list.html

{% extends 'admin/base.html' %}
{% import "admin/ui/admin_page.html" as pg %}

{% block css %}

{% endblock %}
{% block content %}

<div class="panel panel-default">
    <div class="panel-heading">
        查询条件
    </div>
    <div class='panel-body'>
        <div class="row">
            <form role="form">
                <div class="col-sm-6 col-md-6 col-lg-4">
                    <div class="form-group">
                        <div class="input-group">
                            <div class="input-group-addon">查找</div>
                            <input class="form-control" type="email">
                        </div>
                    </div>
                </div>
                <div class="col-lg-12">
                    <hr class="mt5 mb15">
                    <button type="submit" class="king-btn king-info">查询</button>
                    <a class="king-btn king-success" href="{{ url_for('admin.account_add') }}">添加账号</a>
                </div>

            </form>
        </div>
    </div>
</div>
<!---->
<div class="panel panel-default">
    <div class="panel-heading">
        带边框的表格
    </div>
    {% for msg in get_flashed_messages(category_filter=["ok"]) %}
    <div class="king-notice2 king-notice-success notice-borders">
        <i class="fa fa-check-circle"></i>
        <div class="notice-text">
            <p>{{ msg }}</p>
        </div>
    </div>
    {% endfor %}
    <div class='panel-body'>
        <div class="table-responsive">
            <table class="table table-bordered table-hover table-striped">
                <thead>
                <tr>
                    <th>名称</th>
                    <th>网站/IP</th>
                    <th>用户名</th>
                    <th>密码</th>
                    <th>备注</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for v in page_data.items %}
                <tr>
                    <td>{{ v.name }}</td>
                    <td>{{ v.website }}</td>
                    <td>{{ v.username }}</td>
                    <td>{{ v.pwd }}</td>
                    <td>{{ v.comment }}</td>
                    <td>
                        <button type="submit" class="king-btn king-warning">编辑</button>
                        <a href="{{ url_for('admin.account_del', id=v.id) }}" type="submit"
                           class="king-btn king-danger">删除</a>
                    </td>
                </tr>
                {% endfor %}
                <tfoot>
                <tr>
                    <td colspan="6">
                        <div class="pagination-info pull-left">共有{{ page_data.total }}条,每页显示:{{ page_data.per_page }}条
                        </div>
                        <div class="pull-right king-page-box">
                            {{ pg.page(page_data, 'admin.account_list') }}
                        </div>
                    </td>
                </tr>
                </tfoot>
                </tbody>
            </table>
        </div>
    </div>
</div>

</div>
{% endblock %}

{% block js %}

{% endblock %}

3、admin_page.html  为分页的模板

{% macro page(data, url) -%}
{% if data %}
<ul class="pagination pagination-small pull-right">
    <li><a href="{{ url_for(url, page=1) }}">首页</a></li>

    {% if data.has_prev %}
    <li class="active"><a href="{{ url_for(url, page=data.prev_num) }}">上一页</a></li>
    {% else %}
    <li class="disabled"><a href="#">上一页</a></li>
    {% endif %}

    {% for v in data.iter_pages() %}
        {% if v == data.page %}
        <li class="active"><a>{{ v }}</a></li>
        {% else %}
        <li><a href="{{ url_for(url, page=v) }}">{{ v }}</a></li>
        {% endif %}
    {% endfor %}

    {% if data.has_next %}
        <li class="active"><a href="{{ url_for(url, page=data.next_num) }}">下一页</a></li>
    {% else %}
        <li class="disabled"><a href="#">下一页</a></li>
    {% endif %}

    <li><a href="{{ url_for(url, page=data.pages) }}">尾页</a></li>
</ul>
{% endif %}
{%- endmacro %}

flask-sqlalchemy 的分页参考文档 http://www.pythondoc.com/flask-sqlalchemy/api.html#id1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何去掉antd中Input、Textarea组件获取焦点时的蓝色边框

    Ant Design 的 Input 输入框组件在获取焦点时会有蓝色的边框,尝试用 outline:none 去掉这个边框,但是发现不管用。

    德顺
  • 深入理解计算机系统(第三版)/ CSAPP 杂谈,第11章:网络编程

    int socket(int domain, int type, int protocol) // 创建套接字描述符,成功返回非负数描述符,失败为-1 int ...

    sickworm
  • 可能是最全的 “文本溢出截断省略” 方案合集

    在我们的日常开发工作中,文本溢出截断省略是很常见的一种需考虑的业务场景细节。看上去 “稀松平常” ,但在实现上却有不同的区分,是单行截断还是多行截断?多行的截断...

    政采云前端团队
  • web性能优化指南

    前端性能优化,是每个前端必备的技能,优化自己的代码,使自己的网址可以更加快速的访问打开,减少用户等待,今天就会从几个方面说起前端性能优化的方案,

    小周sri的码农
  • 「知识拾遗」 http2/http3总结

    在HTTP1.1的协议中,我们传输的request和response都是基本于文本的,这样就会引发一个问题:所有的数据必须按顺序传输,比如需要传输:hello ...

    winty
  • 【开源游戏/休闲益智】水果五子棋

    一款HTML5的五子棋小游戏,游戏中的棋子都是可爱的水果。如果你也喜欢五子棋游戏,那就赶快来挑战一下吧。

    用户5997198
  • 浏览器相关原理(面试题)详细总结二

    按照渲染的时间顺序,流水线可分为如下几个子阶段:构建 DOM 树、样式计算、布局阶段、分层、栅格化和显示。

    winty
  • CSS3实现图形曲线阴形和翘边阴影

    本文首发于前端Q公众号,时间为2016年03月12日,由于当时没标原创,现重发一下标注原创...

    winty
  • nginx之配置proxy_set_header问题梳理

    将左侧匹配到的/proxy_path/开头的url全部转发到后端服务器 192.168.223.137。

    小勇DW3
  • Ajax 对缓存的处理

    浏览器的一次请求需要从服务器获得许多css、img、js等相关的文件,如果每次请求都把相关资源文件加载一次,对带宽、服务器资源、用户等待时间都有严重的损耗,浏览...

    Debug客栈

扫码关注云+社区

领取腾讯云代金券