Колба с дзиндзя, выпуск с нумерацией страниц после первой страницы
Я создал выпадающее меню для поиска деталей по номеру проекта из базы данных 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 %}
1 ответ
Если представление принимает аргумент, вы должны включить эту переменную в маршрут.
В вашем случае вы пропали без вести 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))