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")) }}
```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值