【发布时间】:2016-09-29 08:45:22
【问题描述】:
我有一个烧瓶 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
【问题讨论】:
-
每个请求都是唯一的。定义为一个变量的一部分的变量在另一个变量中不存在。此外,这不是 Python 中作用域的工作方式。在一个函数中定义的变量在另一个非嵌套函数中不可用。只需将
form = Fruit()添加到fruit_submit即可。 -
form = Fruit()在fruit_submit中重新定义?? @dirn -
你没有重新定义任何东西。
form未在fruit_submit中定义。那是whatNameErrormeans。如果你想在fruit_submit中使用名为form的东西,你需要定义它。
标签: python flask flask-wtforms