Как передать аргументы в redirect (url_for()) из Flask?

Я пытаюсь понять, как лучше перенаправить и передать аргументы с помощью Flask

Ниже мой код, я обнаружил, что x и y не попадают в шаблон.

Правильно ли мой синтаксис? Я что-то пропустил? Я могу отобразить шаблон, но я хочу перенаправить на url /found, а не просто вернуть шаблон для find.html

@app.route('/found')
def found(email,listOfObjects):
  return render_template("found.html",
      keys=email,obj=listOfObjects)

@app.route('/find', methods=['GET','POST'])
def find():
    if request.method == 'POST':
        x = 3
        y = 4
        return redirect(url_for('found',keys=x,obj=y))

    return render_template("find.html")

Ответ 1

Переадресация в порядке, проблема связана с маршрутом found. У вас есть несколько способов передать значения конечной точке: либо как часть пути, в параметрах URL (для запросов GET), либо тело запроса (для запросов POST).

Другими словами, ваш код должен выглядеть следующим образом:

@app.route('/found/<email>/<listOfObjects>')
def found(email, listOfObjects):
  return render_template("found.html",
      keys=email, obj=listOfObjects)

В качестве альтернативы:

@app.route('/found')
def found():
  return render_template("found.html",
      keys=request.args.get('email'), obj=request.args.get('listOfObjects'))

Кроме того, ваше перенаправление должно содержать параметры запроса, а не параметры шаблона:

return redirect(url_for('found', email=x, listOfObjects=y))

Надеюсь, что это поможет.