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")) }}
```