如何将 Flask 搜索引擎结果拆分到不同的页面?
P粉614840363
P粉614840363 2024-02-03 21:29:43
[CSS3讨论组]

我使用 Flask 创建了一个搜索引擎,它返回从与健康主题相关的文章生成的维基百科语料库的搜索结果。有些查询返回数百个结果,因此我想添加一个功能,将结果拆分为多个页面。下面是生成网页的index.html代码:

{% extends "base.html" %}
{% block title %}Search Page{% endblock %}
{% block contents %}

  

Search Results For {{user_query}}

{% if search_results_list|length > 0 %} {% for r in search_results_list %}

{{r[1]}}

{% endfor %} {% else %}

No search result

{% endif %}
Copyright © Team Dream
{% endblock %}

我没有太多使用 HTML 创建网页的经验,所以我不完全确定如何添加此功能。这里还有生成应用程序的 Python 代码:

from flask import Flask, render_template, request
from search_engine import query_prep, OkapiBM25
import pickle

app = Flask(__name__)

@app.route('/')
def results():
    return render_template('index.html')

@app.route('/', methods=['POST'])
def process_res():
    with open("inv_index.pickle", "rb") as file:
        inv_ind = pickle.load(file)
    user_search_query = request.form['msg']
    queries = {'q': query_prep(user_search_query)}
    ranking = OkapiBM25(inv_ind, queries)['q']
    seen = set()

    newRes= []
    myDict = pickle.load(open('text_summaries.pickle','rb'))
    
    for r in ranking:
        newRes.append((r[1], myDict[r[1]]))

    return render_template('index.html', search_results_list = newRes,
                                          user_query=user_search_query)

if __name__ == "__main__":
    app.run(debug=True)

该代码使用语料库的倒排索引打开一个 pickle 文件,然后针对该索引运行查询,对结果进行排名并返回它们。每个搜索结果下方还显示每个维基百科文章的文本摘要。如果您想尝试一下并看看我正在尝试做什么,这里是网页的部署版本:https://searchenginecapstone.herokuapp.com/

如果您搜索“健康”,您会看到一页上有 442 个结果。我想调整代码(我认为这将仅在 HTML 部分中完成 - 但不完全确定)以将结果分成 10-20 个块。页面右下角已经有一个用于页面的按钮,但它目前没有任何作用。我感谢您提供的任何帮助或想法。如果您还需要从编码方面查看其他内容来回答这个问题,请告诉我。

我发现 Flask 对 paginate() 方法的分页有本机支持,因此如果我使用以下内容修改 render_template() 中返回的内容:

from flask_paginate import Pagination, get_page_parameter

    def process_res():
    with open("inv_index.pickle", "rb") as file:
        inv_ind = pickle.load(file)
    user_search_query = request.form['msg']
    queries = {'q': query_prep(user_search_query)}
    ranking = OkapiBM25(inv_ind, queries)['q']
    seen = set()

    newRes= []
    myDict = pickle.load(open('text_summaries.pickle','rb'))
    
    for r in ranking:
        newRes.append((r[1], myDict[r[1]]))

    page = request.args.get(get_page_parameter(), type=int, default=1)
    pagination = Pagination(page=page, total=len(newRes), search=user_search_query, record_name='Search Results')
    return render_template('index.html', search_results_list = newRes,
                                          user_query=user_search_query,
                                          Pagination = pagination)

该页面似乎可以工作(没有出现分页),所以我想我必须更新索引文件以反映分页更改,但我不知道如何。

P粉614840363
P粉614840363

全部回复(1)
P粉883223328

如果您使用 Flask-SQLAlchemy 扩展,则可以使用 paginate() 方法将搜索引擎结果拆分为不同的页面。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号