zoukankan      html  css  js  c++  java
  • flask的分页功能

    分页是个很通用的东西,在flask中,有一个macro的语法,类似于宏,我们可以将通用的东西通过macro写入单独的html文件以方便维护,减少代码量。下面是我的分页的macro文件render_pagination.html,里面用到的样式都是bootstrap中的,如下:

    {% macro render_pagination(pagination) %}
    <div class=pagination>
        {% if pagination.has_prev %}
            <a href="{{ url_for_other_page(pagination.page - 1) }}" class="btn btn-info btn-sm">上一页</a>
        {% endif %}
        {% for page in pagination.iter_pages() %}
            {% if page %}
                {% if page != pagination.page %}
                    <a href="{{ url_for_other_page(page) }}" class="btn btn-info btn-sm">{{ page }}</a>
                {% else %}
                    <a href="{{ url_for_other_page(page) }}" class="btn btn-info btn-sm" disabled="disabled">{{ page }}</a>
                {% endif %}
            {% else %}
                <span class=ellipsis>…</span>
            {% endif %}
        {% endfor %}
        {% if pagination.has_next %}
            <a href="{{ url_for_other_page(pagination.page + 1) }}" class="btn btn-info btn-sm">下一页</a>
        {% endif %}
    </div>
    {% endmacro %}
    

    上面的代码分三部分,一是判断是否有前一页,有则显示上一页按钮,中间的for循环为页数的迭代展示,最后一部分是判断是否有下一页,有则显示相应按钮。
    这个macro中涉及到一个url_for_other_page函数,我们定义如下:

    def url_for_other_page(page):
        # args = request.view_args.copy()
        args = dict(request.view_args.items() + request.args.to_dict().items())  #如果采用上面那句则换页时querystring会丢失
        args['page'] = page
        return url_for(request.endpoint, **args)
    
    app.jinja_env.globals['url_for_other_page'] = url_for_other_page
    

    上面的代码定义了url_for_other_page函数,注意到里面对args的赋值采用了dict,当时我不是这么写的,当时只用了request.view_args.copy(),结果点击第二页的时候,查询参数就丢失了,很是头大,后台查询资料后写成dict那种方式,查询参数就不会丢失了。
    这个函数定义好后,我们向flask的jinja引擎注册一个环境变量,然后就可以在模板中使用这个方法了。
    上面定义好后,我们只需要在需要引入分页的页面添加下面的代码:

    <div style="float: right">
        {% from "macros/render_pagination.html" import render_pagination %}
        {{ render_pagination(pagination) }}
    </div>

    结束!!

  • 相关阅读:
    Tomcat 7.x 6.x 和 JDK 7 旧版本下载教程
    下载ios系统文件,使用UltraISO刻录系统(windows Server)光盘,安装操作系统
    MSDN, 我告诉你
    669. 修剪二叉搜索树
    99. 恢复二叉搜索树
    windows系统 python安装uwsgi教程
    mysql5.7修改密码命令
    客户端浏览器访问django服务器
    二、kafka的环境部署+命令行
    二十、SpringCloud Alibaba Seata处理分布式事务(一、基础)
  • 原文地址:https://www.cnblogs.com/mosson/p/6970860.html
Copyright © 2011-2022 走看看