• Flask用paginate实现数据分页(二)


    1,数据获取的视图函数

    # 获取用户列表
    @pawnxc.route("/user_list", methods=["GET", "POST"])
    def user_list():
        page = request.args.get('page', 1, type=int)
        pagination = Pawn_dl.query.order_by(Pawn_dl.ssfj.asc()).paginate(page, per_page=20, error_out=False)
        users = pagination.items
        # 得到辖区列表
        fjs = PawnFj.query.order_by(PawnFj.fjdm)
        # 将查询结果对象转换为字典数据
        ssfj_list = []
        if fjs:
            for fj in fjs:
                ssfj_list.append(fj.to_dict())
        return render_template('user_list.html', users=users, ssfj_list=ssfj_list, pagination=pagination)

    从请求参数中获取页码(request.args),如果没有明确指定,则默认渲染第一页。

    参数 type=int 保证参数无法转换成整数时,返回默认值。

    为了显示某页中的记录,要把 all() 换成 Flask-SQLAlchemy 提供的 paginate() 方法。

    页数是 paginate() 方法的第一个参数,也是唯一必需的参数。

    可选参数 per_page 用来指定 每页显示的记录数量;如果没有指定,则默认显示 20 个记录。

    另一个可选参数为 error_ out,当其设为 True 时(默认值),如果请求的页数超出了范围,则会返回 404 错误;如果 设为 False,页数超出范围时会返回一个空列表。

      paginate() 方法的返回值是一个 Pagination 类对象,这个类在 Flask-SQLAlchemy 中定义。 这个对象包含很多属性,用于在模板中生成分页链接,因此将其作为参数传入了模板。

    2,分页模板(flask_pagination.html):

    <!--以 Jinja2 宏的形式实现的分页导航-->
    {% macro pagination_widget(pagination, endpoint) %}
    <ul class="pagination">
        <li>{% if not pagination.has_prev %} {% endif %}
            <a href="{% if pagination.has_prev %}{{ url_for(endpoint,page = pagination.page - 1, **kwargs) }}
                {% else %}#{% endif %}">&laquo;
            </a>
        </li>
        {% for p in pagination.iter_pages() %}
        {% if p %}
        {% if p == pagination.page %}
        <li class="active">
            <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a>
        </li>
        {% else %}
        <li>
            <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a>
        </li>
        {% endif %}
        {% else %}
        <li class="disabled">
            <a href="#">&hellip;</a>
        </li>
        {% endif %}
        {% endfor %}
        <li>{% if not pagination.has_next %} {% endif %}
            <a href="{% if pagination.has_next %}{{ url_for(endpoint,page = pagination.page + 1, **kwargs) }}{% else %}#{% endif %}">&raquo;</a>
        </li>
    </ul>
    {% endmacro %}

    3,在需要分页的HTML文件中引入此模板:

            {% import "flask_pagination.html" as macros %}
            {%if pagination%}
                <div class="pagination">
                    {{ macros.pagination_widget(pagination, '.user_list') }}
                </div>
            {% endif %}
  • 相关阅读:
    串行化数据读取类(WebService下DataSet的高性能替代类)源代码
    如何在Access2007中打开加密的Access2003数据库
    业务流程不是需求(ZT)
    XML文件的DOCTYPE定义(转)
    别让Hibernate偷走了您的身份(转)
    有关Struts标签<html:cancel>使用的一点提示
    Silverlight下实现Windows8风格的进度条
    DotNetMock单元测试的利器
    进入ubuntu终端的快捷键
    花生壳域名建站,内网能访问,外网不能访问的解决办法
  • 原文地址:https://www.cnblogs.com/hzjdpawn/p/12687127.html
Copyright © 2020-2023  润新知