Flask url_for() с несколькими параметрами

Проблема:

У меня есть кнопка ввода в форме, которая, когда ее отправленная должна перенаправлять два параметра search_val и i, в функцию more_results() (см. ниже), но я получаю ошибку типа при создании wsgi,

Ошибка: TypeError: more_results() takes exactly 2 arguments (1 given)

HTML:

 <form action="{{ url_for('more_results', past_val=search_val, ind=i ) }}" method=post>
    <input id='next_hutch' type=submit value="Get the next Hunch!" name='action'>
 </form>

функция колбы:

@app.route('/results/more_<past_val>_hunches', methods=['POST'])
def more_results(past_val, ind):

    if request.form["action"] == "Get the next Hunch!":
        ind += 1 
        queried_resturants = hf.find_lunch(past_val) #method to generate a list
        queried_resturants = queried_resturants[ind]
        return render_template(
                               'show_entries.html', 
                                queried_resturants=queried_resturants, 
                                search_val=past_val,
                                i=ind 
                               )

Любая идея о том, как пройти ошибку сборки?

Что я пробовал:

Создание ссылки на URL-адрес приложения Flask в шаблоне jinja2

для использования нескольких параметров с url_for()

Ошибка сборки с переменными и url_for в Flask

аналогичные сборки erros

В качестве побочного примечания, цель функции - перебирать список, когда кто-то нажимает кнопку "следующая страница". Я передаю переменную i, поэтому у меня есть ссылка, чтобы продолжать увеличивать ее по списку. Есть ли метод фляги/джиньи 2, который будет работать лучше? Я просмотрел функцию cycling_list, но, похоже, не может быть использован для визуализации страницы, а затем повторно отобразить ее с помощью cycling_list.next().

Ответы

Ответ 1

В вашем маршруте не указывается, как заполнить больше, чем только один аргумент past_val. Флажок не может магически создать URL-адрес, который передаст два аргумента, если вы не дадите ему шаблон с двумя аргументами.

Ответ 2

Также возможно создание маршрутов, поддерживающих переменное количество аргументов, путем задания значений по умолчанию некоторым аргументам:

@app.route('/foo/<int:a>')
@app.route('/foo/<int:a>/<int:b>')
@app.route('/foo/<int:a>/<int:b>/<int:c>')
def test(a, b=None, c=None):
   pass