微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flask解决提交表单后的分页失效问题

flask在提交表单后查询分页失效

flask在提交表单后查询分页失效

找了好半天,终于搞定搞定了,直接上代码

##form提交表单

有些时候,我们在flask构建条件进行查询,一般都会使用到form进行提交条件,如果数据量比较多的情况下,我们在后台处理的时候就会进行分页,(数据量大的不建议在前端进行分页,例如我目前数据量达到6万条,前端加载会非常的慢),如图

在这里插入图片描述

最开始的时候,当我提交表单了,在点击分页分页显示的不是提交表单后的结果,尝试了各种办法后,仍然无法解决,思前顾后,应该是分页的宏出现问题,直接指向cms.endpoint,但是没有传输到上一次提交的form的参数,后来我对分页代码进行优化,如下:
</

<nav aria-label="Page navigation ">
    <ul class="pagination">
        <li><a href="{{ url_for(page_function,page = 1) }}">首页</a></li>
        {% if page_data.has_prev %}
            <li><a href="{{ url_for(page_function,page = page_data.prev_num,**kwargs) }}">«</a></li>
        {% endif %}
        {% for page in page_data.iter_pages() %}
            {% if page %}
                {% if page !=page_data.page %}
                    <li><a href="{{ url_for(page_function,page = page,**kwargs) }}">{{ page }}</a></li>

                {% else %}
                    <li class="active"><a href="#">{{ page }}</a></li>
                {% endif %}
            {% endif %}
        {% endfor %}
        {% if page_data.has_next %}
            <li><a href="{{ url_for(page_function,page = page_data.next_num,**kwargs) }}">»</a></li>
        {% endif %}
        <li><a href="{{ url_for(page_function,page = page_data.pages,**kwargs) }}">末页</a></li>
    </ul>
</nav>

以及将路由设计如下:

def tab_life():
    form=Tab_life_form()
    page=int(request.args.get("page",1))
    if form.submit() and request.method=="POST":
        product_name=form.product_name.data
        tab_id=form.tab_id.data
        return redirect(url_for('cms.tab_life',product_name=product_name,tab_id=tab_id))
    else:
        product_name=request.args.get("product_name")
        tab_id=request.args.get("tab_id")
        print(product_name,tab_id)
        paginates = Receive_log.query.join(Product_Receive, Product_Receive.id == Receive_log.receive_id).join(Product,
                                                                                                               Product.id == Product_Receive.product_id).filter(
            Product.p_name.like("%{}%".format(product_name if product_name is not None else ""))).filter(
            Receive_log.receive_id.like("%{}%".format(tab_id if tab_id is not None else ""))).order_by(
            Receive_log.create_time.desc()).paginate(page=page, per_page=15,
                                                     error_out=False)
        return render_template("cms/logs/tab_life.html", paginates=paginates, form=form)
        >`

最后关键的一点就是需要在前端渲染的时候讲表单数据添加**kwars中
如下:

{{ render_page_data(paginates,'cms.tab_life',product_name=request.args.get("product_name"),tab_id=request.args.get("tab_id")) }} ```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐