2015-09-25 39 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>