私はフラスコ重量を持っています。インスタンス化されたルートでフォームを検証できます。しかし、私は別のルートからそれを検証したい。セッション変数を使用せずに、私は他のルートからフォームオブジェクトにアクセスできる他の方法はありますか?別のルートでのフォームバリデーションFlask
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:
<form action="" method="POST">
{{ form.hidden_tag() }}
{{form.Fruit}}
{{form.Fruit.errors}}
<input type = "submit">
</form>
上記コードW
@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)
名.html orkは完全にうまくいった。しかし、私は以下のようなことをしたい:
@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の一部として定義された変数は別の変数には存在しません。また、それはPythonでスコープがどのように機能するかではありません。ある関数で定義された変数は、ネストされていない別の関数内では使用できません。単に 'form = Fruit()'を 'fruit_submit'に追加すると、すべて設定されます。 – dirn
'form = Fruit()'は 'fruit_submit'に再定義されますか? @dirn – wonder
あなたは何も再定義していません。 'form'は' fruit_submit'で定義されていません。それは[NameErrorの意味](https://docs.python.org/3/library/exceptions.html#NameError)です。 'fruit_submit'の中で' form'という名前のものを使いたい場合は、それを定義する必要があります。 – dirn