用Python/Flas实现搜索结果的分页

2024-04-20 03:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我还在做我的项目,现在要搜索数据了。通常,我执行post请求执行路由,并将搜索字符串作为参数:

@bp.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == 'POST':
        resp = db.session.query(MyTable).filter(MyTable.name.like('%'+request.form['search_name']+'%')).all()
        ... # do something else

我的问题是,当搜索结果超过每页的最大项数时,如何实现分页。在

分页本身在不使用任何用户操作的情况下显示数据时不会出现问题,有几种方法可以通过Flask paginate或通过Flask SQLAlchemy的paginate()函数来实现。但是,既然page是用?page=x作为GET参数给出的,而搜索字符串是POST参数,那么如何通过其他页面传递搜索字符串呢?在

不知怎么的,我脑子不好,在网上做了很多调查,但我只得到了对正常数据进行分页的结果,而不是搜索结果。在

能给我个建议吗?在

多谢你的问候,托马斯


Tags: 数据项目字符串nameflask路由search参数
1条回答
网友
1楼 · 发布于 2024-04-20 03:52:43

我想我已经找到了一个解决方案——Flask的课程

@app.route('/search', methods=['GET', 'POST'])
def search():
    if 'name' in session['search']:
        name = session['search']['name']
    elif request.method == 'POST':
         jboss_name = request.form.get('name')
         session['search']['name'] = name

    page = request.args.get('page', 1, type=int)

    resp = db.session.query(MyTable)\
            .filter(MyTable.name.like('%' + name + '%'))\
            .paginate(page, app.config['ITEMS_PER_PAGE'], False)

    next_url = url_for('search', page=resp.next_num) \
        if resp.has_next else None
    prev_url = url_for('search', page=resp.prev_num) \
        if resp.has_prev else None

    return render_template('search.html',
                            resp=resp,
                            next_url=next_url,
                            prev_url=prev_url)

第一个调用通过POST请求完成,将数据发送到相应的应用程序路径. 如果会话值还没有设置,它将被设置在第5行。通过会话,您可以确保在所有页面中都使用原始搜索字符串。在

这可能不是高度开发,但至少是一个如何在搜索结果中分页的有效示例。此短片段中未实现的正在清除会话。在

你好,托马斯

相关问题 更多 >