python - 为从数据库检索的数据创建动态html链接

标签 python html elasticsearch flask

我正在使用flask和html制作搜索引擎,同时将elasticsearch用于搜索功能。
这是我的 app.py 文件

from flask import Flask, render_template, request
from elasticsearch import Elasticsearch

app = Flask(__name__)
es = Elasticsearch()
@app.route('/',methods=["GET","POST"])
def index():
    q = request.form.get("q")
    if q is not None:
        resp = es.search(index='aman', body={"query": {"match":{"NAME": q}}})
        return render_template('index1.html', q=q, response=resp["hits"]["hits"])
    else:
        return render_template('index1.html')

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

这是我的 index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/" method="post" autocomplete="off">
        <label for="q"> search here : </label><input type="text" name="q" id="q" value="{{q}}">
        <input type="submit" value="search">
    {{response}}

</form>
</body>
</html>

我的数据以json格式存储。因此,在搜索json时,将检索格式化的数据。由于可以根据查询一次检索多个文档,因此在单个页面上看起来很破旧。
Shabby representation of data obtained upon searching
因此,我尝试通过建立html链接并使用html中的有序列表仅显示数据名称来使其变得更整洁。我这样做是通过将index.html中的 {{response}} 替换为:
    <ol>
        {% for resp in response %}
        <li><a href="{{resp['_source'].url}}"> {{resp._source.NAME}}</a></li>
        {% endfor %}
    </ol>

现在我正在获取所需格式的数据,即result displayed in desired format.
这样做的问题是,理想情况下,单击URL链接后,我应该获取与该URL相关联的数据。但它不会返回任何东西。

最佳答案

The requested URL was not found on the server



此错误非常明显,因为在/处只有一条路由。您可以通过两种方式解决此问题。您可以添加为单个项目添加 View 的路线,也可以使您的项目在同一页面中可折叠。我认为最好添加可折叠的项目,这样您就不必再次进行 Elasticsearch 。

示例代码显示带有NAME且内容为ABOUT的卡片。您可以根据需要自定义它。有关折叠卡片的更多信息,请点击https://getbootstrap.com/docs/4.3/components/collapse/
<ol>
    <div class="accordion" id="accordionExample">
        <div class="card">
        {% for resp in response %}
            <div class="card-header" id="heading{{ loop.index }}">
                <h2 class="mb-{{ loop.index }}">
                    <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse{{ loop.index }}" aria-expanded="true" aria-controls="collapse {{ loop.index }}">
                        {{resp._source.NAME}}
                    </button>
                </h2>
            </div>

            <div id="collapse {{loop.index}}" class="collapse show" aria-labelledby="heading{{loop.index}}" data-parent="#accordionExample">
                <div class="card-body">
                    {{resp._source.ABOUT}}
                </div>
            </div>
        {% endfor %}
        </div>
    </div>
</ol>

关于python - 为从数据库检索的数据创建动态html链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836204/

相关文章:

python - 如何处理猜数字游戏(带有扭曲)算法?

python - Pyspark:重命名 DataFrame 列中的字典键

python - Aws 将凭据传递给 ansible s3 模块

html - 图片覆盖全屏,底部留白

html - Bootstrap 中的文本较大的列

sorting - Elasticsearch _geo_distance排序错误

python - 如何从包含来自多个来源的多个词典的列表中创建数据框

javascript - 框架 + Internet Explorer 怪癖

node.js - 如何在 ExpressJS 上使用 ElasticSearch geo_distance

elasticsearch - 如何在ELK中分析来自多个来源的日志