【问题标题】:how to highlight a search query in my results inside template如何在模板内的结果中突出显示搜索查询
【发布时间】:2014-09-23 04:05:32
【问题描述】:

好的,我用Flask-WhooshAlchemy实现了这个简单的搜索页面

@views.route('/search', methods=['GET'])
def search():
    query = request.args['query']
    results = []

    def _model_search(m):
        return m.query.whoosh_search(query).all()

    if query:
        for model in [Student, StudentHomework, Winner]:
            results += _model_search(model)

    return render_template(
        'search.html',
        query=query,
        results=results,
    )

然后,在我的搜索模板中,我输出找到的results。如何突出显示匹配的查询?

例如,在我的Student 表中,我在nameforname 列中进行搜索。在我的模板中,我执行以下操作:

{% for student in results %}
  {% student.name %}
  {% student.forname %}
{% endfor %}

如何突出显示查询字符串匹配的位置?

【问题讨论】:

  • 我想我知道这个问题的答案,但您必须再详细说明一下。您想用匹配突出显示 字段 吗? (例如,如果学生姓名匹配,则突出显示学生姓名)。你到底想强调什么?
  • 我只想突出显示搜索query 的出现。就像您在浏览器中所做的那样 CTRL + F 并找到一个单词。谢谢

标签: flask sqlalchemy jinja2 whoosh


【解决方案1】:

现在回答为时已晚,但我希望它对将来的某人有所帮助。 即使当我看到这个问题时,当我找到一个我认为最好分享的解决方案时,我也遇到了同样的问题。

虽然您希望突出显示两列。但我只能突出显示一列。

{% for student in results %}
  {% if query in student.name %}
      {{ student.name.replace(query, '<span style="background-color: yellow;">{}</span>'.format(query)) }}
  {% endif %}
  {% else %}
      {{ student.name }}
{% endfor %}

如果这些是 student.name 列中的查询,它将突出显示为 CTRL + F

注意:query是搜索输入内容

【讨论】:

  • 您确定该解决方案有效吗?我对烧瓶没有丰富的经验,但我认为它不会让你只放置这样的 HTML 标签,它会用 HTMLEncode 将它们替换为 &amp;lt;&amp;gt;&amp;lt;&amp;gt;
  • 显然你的答案不起作用。 stackoverflow.com/questions/31489609/…我的朋友学习编程烧瓶花了太多时间想知道那东西出了什么问题,因为你的答案质量低。
猜你喜欢
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 2019-03-27
  • 2012-06-25
  • 2014-07-25
  • 2011-09-18
  • 2021-07-24
相关资源
最近更新 更多