python - Flask with Jinja 在第一页后出现分页问题
问题描述
我创建了一个下拉菜单,用于从 SQL 数据库中按项目编号搜索零件。第一页加载了正确的部分,但随后的任何页面都会出现以下错误:
类型错误:show_compound() 缺少 1 个必需的位置参数:'search_string'
从我在网上看到的情况看来,我可能需要使用*args
或传递search_string
给模板,但我不确定如何使用*args
或在模板上的何处插入search_string
值。
@parts_database.route('/searchcompound', methods=['GET', 'POST'])
@login_required
def compounds_search():
form = ProjectSearch(request.form)
if form.validate_on_submit():
search_string = form.select.data.project_number
return show_compound(search_string)
return render_template('parts_database/search_compounds.html', form=form)
@parts_database.route('/showcompound', methods=['GET'])
@login_required
def show_compound(search_string):
page = request.args.get('page', 1, type=int)
pagination = PartsTable.query.filter_by(project_number=search_string).order_by(PartsTable.part_number).paginate(page, per_page=15, error_out=False)
compound = pagination.items
page_10 = pagination.next_num+9
if page_10 > pagination.pages:
pageincrement = pagination.pages
else:
pageincrement = page_10
page_decrement = page - 10
if page_decrement < 1:
page_decrement = 1
return render_template('parts_database/showpartstable.html', compound=compound, pagination=pagination, pageincrement=pageincrement, page_decrement=page_decrement)
模板 :
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% import "_macros.html" as macros %}
{% block title %}Amos{% endblock %}
{% block page_content %}
<div class="page-header">
<a href="{{ url_for('main.render_csv', jobname_filename = 'Parts_PDB') }}"><h1>Parts</h1></a>
{% include 'parts_database/_showpartstable.html' %}
{% if pagination %}
<div class="pagination">
{{ macros.pagination_widget(page_decrement, pageincrement, pagination, '.show_compound') }}
</div>
{% endif %}
</div>
{% endblock %}
解决方案
如果视图接受参数,则必须在路由中包含该变量。
search_string
在您的情况下,您的show_compound
路线定义中缺少。尝试这样的事情:
@parts_database.route('/showcompound/<search_string>', methods=['GET'])
@login_required
def show_compound(search_string):
(...)
编辑:
另外,我建议重定向而不是调用另一个视图的函数。
替换这个:
if form.validate_on_submit():
search_string = form.select.data.project_number
return show_compound(search_string)
有了这个:
您必须在此之前导入重定向:
from flask import redirect # (Add this at the top)
(...)
if form.validate_on_submit():
search_string = form.select.data.project_number
return redirect(url_for('parts_database.show_compound', search_string=search_string))
推荐阅读
- java - 单元测试基于 Spring Boot 的 REST 端点,它返回按给定方向排序的对象集合
- java - java.lang.NoClassDefFoundError: org/springframework/core/ErrorCoded
- flutter - 鼠标悬停时如何删除 ElevatedButton 周围的突出显示?
- numpy - 为什么numpy的vectorize函数对第一个元素执行两次
- javascript - 在我的加载状态上设置一个 setTimeout 以防止登录页面在用户完成身份验证之前闪烁是不好的做法吗?
- installation - 在一篇文章中进行环境配置时出现关于安装 pytorch-mpi 的错误
- kubernetes - 根据要求获取示例 k8 yaml 进行编辑的最佳方法是什么?
- graph - 在贝尔曼福特算法中将距离数组初始化为 0
- c++ - 使用 c++11
在 Windows 上使用 COM 线程单元 - 提示、技巧、陷阱? - discord.py - 让机器人通过 id 编辑旧消息