Flask使用Paginate分页时仅显示current_user对应客户数据问题求助
Flask当前用户客户分页功能修复方案
错误原因
- 视图层未对客户数据做用户过滤:原代码直接调用
Client.query.paginate()会查询client表的全部数据,所以分页对象包含所有用户的客户信息 current_user.clients是SQLAlchemy关系查询返回的原生客户集合,属于普通查询集/列表,没有分页对象特有的items属性,所以模板遍历user.clients.items不会返回任何数据
修复步骤
1. 修改视图层查询逻辑
在客户查询时添加用户过滤条件,仅返回当前登录用户关联的客户数据,修改后代码如下:
@views.route('/', methods=['GET', 'POST'], defaults={"page": 1}) @views.route('/<int:page>', methods=['GET', 'POST']) @login_required def home(page): # 新增user_id过滤条件,仅查询当前用户的客户 client_paginator = Client.query.filter_by(user_id=current_user.id).paginate(page=page,per_page=3,error_out=False) return render_template("home.html", user=current_user, client_paginator=client_paginator)
2. 修改模板遍历代码
直接遍历过滤后的分页对象的items属性即可:
{% for client in client_paginator.items %}
可选:分页导航栏实现
如果需要添加页码跳转功能,可在模板中补充如下代码:
<div class="pagination"> {% if client_paginator.has_prev %} <a href="{{ url_for('views.home', page=client_paginator.prev_num) }}">上一页</a> {% endif %} {% for page_num in client_paginator.iter_pages(left_edge=1, right_edge=1, left_current=2, right_current=3) %} {% if page_num %} {% if client_paginator.page == page_num %} <strong>{{ page_num }}</strong> {% else %} <a href="{{ url_for('views.home', page=page_num) }}">{{ page_num }}</a> {% endif %} {% else %} <span>...</span> {% endif %} {% endfor %} {% if client_paginator.has_next %} <a href="{{ url_for('views.home', page=client_paginator.next_num) }}">下一页</a> {% endif %} </div>
内容的提问来源于stack exchange,提问作者Ariel Souto
相关产品推荐
相关产品推荐

