#python #flask #flask-wtforms
#python #колба #flask-wtforms
Вопрос:
У меня есть wtform колбы. Я могу проверить форму на маршруте, где она создается. Но я хочу проверить это с другого маршрута. Есть ли какой-либо другой способ, с помощью которого я могу получить доступ к объекту формы с другого маршрута, не используя переменную сеанса?
form_class.py
class Fruit ( Form):
Fruit = SelectField ( choices = [ ( 0,"Select Fruit"), ( 1,'Apple'), (2,'Grape'), (3,'Orange') ], coerce = int, id="Fruit", validators = [Required()])
views.py:
@app.route('/fruit', methods = ['GET', 'POST'])
def fruit():
form = Fruit()
if form.validate_on_submit():
return render_template("output.html")
return render_template("name.html", form = form)
name.html
<form action="" method="POST">
{{ form.hidden_tag() }}
{{form.Fruit}}
{{form.Fruit.errors}}
<input type = "submit">
</form>
Приведенный выше код работает совершенно нормально. Но я хочу сделать что-то вроде приведенного ниже:
@app.route('/fruit')
def fruit():
form = Fruit()
'''if form.validate_on_submit():
return render_template("output.html")'''
return render_template("name.html", form = form)
@app.route('/fruit_submit', methods = ['GET', 'POST'])
def fruit_submit():
print request.form
if form.validate_on_submit():
return render_template("output.html")
При попытке выполнить приведенный выше код я получаю следующую ошибку.
NameError: global name 'form' is not defined
Комментарии:
1. Каждый запрос уникален. Переменная, определенная как часть одной, не существует в другой. Кроме того, это не то, как работает scope в Python. Переменная, определенная в одной функции, недоступна внутри другой, не вложенной функции. Просто добавьте
form = Fruit()
вfruit_submit
, и все будет готово.2.
form = Fruit()
переопределить вfruit_submit
?? @dirn3. Вы ничего не переопределяете.
form
не определено вfruit_submit
. Вот чтоNameError
значит . Если вы хотите использовать что-то с именемform
внутриfruit_submit
, вам нужно определить это.
Ответ №1:
Вы должны вызвать класс Fruit с помощью request.form
@app.route('/fruit_submit', methods = ['GET', 'POST'])
def fruit_submit():
print Fruit(request.form)
if Fruit(request.form).validate_on_submit():
return render_template("output.html")
Комментарии:
1. Так и должно быть
Fruit(request.form).validate_on_submit()
. Пожалуйста, отредактируйте его. Я приму ответ. Спасибо.