#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
принимает только одну конечную точку с необязательным количеством аргументов.