#python #flask
#python #flask
Вопрос:
когда я передаю параметр, используя redirect и url_for, он добавляет их в URL, но не показывает их в html. Если я использую render_template и передаю параметры, он работает так, как должен.
Мой код:
@app.route("/forgotpass", methods = ["GET", "POST"])
def forgot_password():
if session["logged_in"] == True:
return redirect(url_for("profile"))
if request.method == "POST":
email = request.form["username"]
email = email.lower()
logins.forgotPassword(email)
return redirect(url_for("login", error = "We have sent you an email with your new password!"))
elif request.method == "GET":
return render_template("forgotPassword.html")
HTML:
<p>{{ error | default('') }}</p>
Кто-нибудь знает, как я могу это исправить?
Ответ №1:
Вот как url_for
это работает, вы можете передать ему параметры / переменные, и они будут добавлены к URL, он не предназначен для отображения ошибок.
Если вы хотите отображать сообщения пользователю, например, после успешного входа в систему или при сбое входа в систему, вместо этого следует использовать мигание сообщений: https://flask.palletsprojects.com/en/1.1.x/patterns/flashing /
Пример кода, сначала импортируйте flash
из flask:
@app.route("/forgotpass", methods = ["GET", "POST"])
def forgot_password():
if session["logged_in"] == True:
return redirect(url_for("profile"))
if request.method == "POST":
email = request.form["username"]
email = email.lower()
logins.forgotPassword(email)
flash('We have sent you an email with your new password!')
return redirect(url_for("login"))
elif request.method == "GET":
return render_template("forgotPassword.html")
Поместите это где-нибудь в свой шаблон входа:
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class="flashes">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}