Хорошо, здесь есть несколько вопросов. Во-первых, атрибут action
вашей формы в home.html
имеет значение "/page2"
. Это означает, что при отправке формы запрос POST направляется к конечной точке /page2
, а не к конечной точке /home
, где вы написали код для обработки отправки формы. Мы можем исправить это, просто удалив атрибут action
, так как это означает, что форма будет отправлять на конечную точку, которая ее загрузила - в этом случае /home
.
Во-вторых, сеансы Flask нельзя использовать без установка секретного ключа для шифрования сеанса. Это можно сделать, присвоив значение app.secret_key
, например, так:
app = Flask(__name__)
app.secret_key = b"my_secret_key"
Наконец, вместо передачи строки в шаблон, например, так: render_template('page2.html', stringval = stringval)
, (обратите внимание также, что это должно быть stringval_get = stringval
), вы можете получить доступ к объекту session
непосредственно из шаблонов. Таким образом, в целом мы можем изменить код вашего приложения на:
app.py:
from flask import Flask, render_template, request, session
app = Flask(__name__)
app.secret_key = b"my_secret_key"
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST' and 'stringval' in request.form:
session["stringvalue_topass"] = request.form.get('stringval')
return render_template('page2.html')
return render_template("home.html")
@app.route('/page2', methods=['GET', 'POST'])
def page2():
return render_template('page2.html')
А ваши шаблоны на:
home. html:
<!doctype html>
<h1>Enter Value </h1>
<div class="main">
<form class="pure-form" method="POST">
stringval:<br>
<input type="text" name="stringval"><br>
<button type="submit" class="pure-button pure-button-primary" value="Submit">Submit!</button>
</form>
</div>
</body>
page2. html:
<code><!doctype html>
<h1>You have selected </h1>
<div class="main">
{% if 'stringvalue_topass' in session %}
<pre>
{% print(session["stringvalue_topass"]) %}
{% endif%}