首页 > 解决方案 > 如何对搜索栏的结果进行分页并避免破坏 Flask?

问题描述

当我在搜索结果的表单中指定关键字时,当我在第一页之后分页中断时,我该怎么办?当我在没有任何过滤器的情况下移动页面时,一切正常。我在我的 Django 项目中遇到了同样的问题,但我通过创建自定义模板标签来修复它,这很难,现在我无法为我的 Flask 应用程序找到任何解决方案。有任何想法吗?也许修改网址?

指定“jquery”关键字时的第一页:

第 1 页

第二页 - 完全打破分页和搜索结果:

第二页

意见.PY

@app.route('/cve_list', methods=['GET', 'POST'])
def cve_list():
    search_form = SearchForm()
    page = request.args.get('page', 1, type=int)
    cve = CVE.query.order_by(CVE.date.desc()).paginate(page=page, per_page=2)

    if search_form.validate_on_submit():  # = when search_form was submitted
        form_data = search_form.search.data
        query = CVE.query.filter(CVE.content.contains(f'{form_data}')).paginate(page=page, per_page=2)
        cve_amount = CVE.query.filter(CVE.content.contains(f'{form_data}')).count()
        if cve_amount > 0:
            flash(f'Found {cve_amount} vulnerabilities based on your search - {form_data}', 'success')
        else:
            flash(f'No vulnerabilities found based on your search - {form_data}', 'warning')

        return render_template('cve_list.html',
                               title=f'Cve{form_data}',
                               form=search_form,
                               cve=query,
                               cve_amount=cve_amount)
    return render_template('cve_list.html',
                           title='Cve List',
                           form=search_form,
                           cve=cve)

HTML

{% for cve in cve.items %}
           <article class="media content-section">
              <div class="media-body">
                 <div class="article-metadata">
                    <a class="mr-2">{{ cve.title }}</a>
                    <small class="text-muted">{{ cve.date }}</small>
                 </div>
                 <p class="article-content">{{ cve.content }}</p>
              </div>
           </article>
           {% endfor %}

            <!-- PAGINATION -->
          {% for page_num in cve.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
                {% if page_num %}
                    {% if cve.page == page_num %}
                        <a class="btn btn-info mb-4" href="{{ url_for('cve_list', page=page_num) }}">{{ page_num }}</a>
                    {% else %}
                        <a class="btn btn-outline-info mb-4" href="{{ url_for('cve_list', page=page_num) }}">{{ page_num }}</a>
                    {% endif %}
                {% else %}
                {% endif %}
            {% endfor %}
      <!-- PAGINATION -->

标签: pythonflask

解决方案


推荐阅读