2015-09-25 33 views
2

我試圖用Flask-Bootstrap quick_form呈現WTF表單。但是,我得到一個錯誤,即form未定義,即使我將其傳入render_template。爲什麼這不起作用?Flask-Bootstrap quick_form認爲從render_template傳入的表單未定義

File "/home/eron/anaconda/lib/python2.7/site-packages/flask_bootstrap/templates/bootstrap/wtf.html", line 190, in template 
    {{ form.hidden_tag() }} 

File "/home/eron/anaconda/lib/python2.7/site-packages/jinja2/environment.py", line 397, in getattr 
    return getattr(obj, attribute) 
UndefinedError: 'form' is undefined 
from flask.ext.wtf import Form 

class NameForm(Form): 
    name = StringField('Login', validators=[Required()]) 
    submit = SubmitField('Submit') 

@app.route('/base', methods=['GET','POST']) 
def index(): 
    name = None 
    form = NameForm() 

    if form.validate_on_submit(): 
     name = form.name.data 
     session['name'] = form.name.data 
     return redirect(url_for('base')) 

    return render_template('base.html', form=form) 
{% extends "bootstrap/base.html" %} 
{% import "bootstrap/wtf.html" as wtf %} 

<div class="col-md-3"> 
    {{ wtf.quick_form(form) }} 
</div> 

回答

0

您寫道:
class NameForm(Form):
然後
return render_template('base.html', form=form)

首先嚐試改變form = formForm = Form

如果這不起作用,請嘗試刪除form = NameForm()並重試。

+0

什麼背後的邏輯是什麼?那將意味着我會通過課堂而不是對象本身,不是嗎? – elelias

-2

從div標籤刪除 {%進口「引導/ wtf.html」爲WTF%},並把它在它

0

末這個答案是近2年來晚了,但我有一個類似的問題和我想分享的想法。 您可以將'表格'更改爲'blogform'。看來,神社是混淆你從燒瓶WTF進口的「形式」模塊:

from flask.ext.wtf import Form 

你只需要改變你的變量名稱到別的東西比「形」等,例如「blogform」 :

@app.route('/base', methods=['GET','POST']) 
def index(): 
    name = None 
    blogform = NameForm() 

    if blogform.validate_on_submit(): 
     name = blogform.name.data 
     session['name'] = blogform.name.data 
     return redirect(url_for('base')) 

    return render_template('base.html', blogform=blogform) 

由於render_template傳遞的變量現在改爲blogform,在HTML文件中,因此對它進行更改:

{% extends "bootstrap/base.html" %} 
{% import "bootstrap/wtf.html" as wtf %} 

<div class="col-md-3"> 
    {{ wtf.quick_form(blogform) }} 
</div> 
相關問題