python - 如何对搜索栏的结果进行分页并避免破坏 Flask?
问题描述
当我在搜索结果的表单中指定关键字时,当我在第一页之后分页中断时,我该怎么办?当我在没有任何过滤器的情况下移动页面时,一切正常。我在我的 Django 项目中遇到了同样的问题,但我通过创建自定义模板标签来修复它,这很难,现在我无法为我的 Flask 应用程序找到任何解决方案。有任何想法吗?也许修改网址?
指定“jquery”关键字时的第一页:
第二页 - 完全打破分页和搜索结果:
意见.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 -->
解决方案
推荐阅读
- javascript - 在 div 内加载 html 页面时出现 JQuery 验证器功能错误
- php - 使用 PDO 获取 ASSOC 数组而不使用准备好的语句
- php - PHP foreach 表单按顺序显示 3 组数组
- c# - 无法在多线程调用 C# MVC 中下载文件
- android - 在 BottomSheetDialogFragment 添加/替换 Fragment
- docker - 具有 Docker EE 许可的 Kubernetes 的现有基础架构
- apache - 使目录看起来像 .htaccess 中的变量
- php - 防止 PHP MySQL 中的重复条目
- acumatica - 在供应商/客户/baccount 屏幕上已添加具有相同密钥的项目错误
- ios - 如何显示模拟器日志?在 IOS 12.0 和 Xcode 10 中?