Flask url_for() не принимает второй аргумент, даже если он требуется

#flask #flask-restful #werkzeug #url-for

Вопрос:

У меня есть следующие маршруты

 @app.route("/dashboard/survey/lt;int:survey_idgt;/responses", methods=["GET"]) def responses(survey_id):  responses = db.session.query(Survey, Responses).join(Responses).filter(Survey.id == survey_id).filter(  Responses.lan_code == "en").all()   return render_template('responses.html', responses=responses, kws=kws)   @app.route("/dashboard/survey/lt;int:survey_idgt;/responses/delete/lt;int:r_idgt;/lt;participant_foldergt;", methods=["POST"]) def delete_response(survey_id, r_id, participant_folder):  #response = Responses.query.get_or_404(r_id)  #db.session.delete(response)  #db.session.commit()  #pfolder = participant_folder.replace("-", "/")  #print(pfolder)  #shutil.rmtree('qdas/static/audioResponses/'   pfolder, ignore_errors=True)  return redirect(url_for('responses', survey_id))  

Когда я пытаюсь перенаправить на «ответы», я получаю следующую ошибку:

Ошибка типа: url_for() принимает 1 позиционный аргумент, но было дано 2

И если удалить survey_id из аргументов, я получу эту ошибку:

werkzeug.routing.BuildError: Не удалось создать URL-адрес для «ответов» конечной точки. Вы забыли указать значения [‘survey_id’]?

Есть ли какой-нибудь способ обойти это?

Ответ №1:

Вам нужно изменить эту строку,

 return redirect(url_for('responses', survey_id))  

к этому.

 return redirect(url_for('responses', survey_id=survey_id))  

Это связано с тем, что url_for принимает только одну конечную точку с необязательным количеством аргументов.