我一直在寻找关于如何使用Flask WTF复选框的示例,但似乎没有例子,或者存在涉及复选框列表的非常复杂的例子。
我确实在Miguel的博客here中找到了一个例子,但是我无法获得要呈现的复选框。这就是我的所作所为:
首先,表单类:
class LoginForm(Form):
email = TextField("Email address", validators=[validators.required()])
password = PasswordField("Password", validators=[validators.required()])
remember_me = BooleanField("Remember me", default = False)
submit = SubmitField("Login")
然后在我的模板中:
<form class="form-signin" role="form" action="{{ url_for('login') }}" method="post">
{{ form.hidden_tag() }}
<div class="form-group">
{{ form.email.label }}
{{ form.email ( ** {'class' : 'form-control'} ) }}
</div>
<div class="form-group">
{{ form.password.label }}
{{ form.password ( ** {'class' : 'form-control'} ) }}
</div>
<div class="form-group">
{{ form.remember_me }} Remember me
</div>
</form>
在表单的最终输出中,缺少复选框:
如果我看到生成的HTML,那么该字段就会丢失:
<form class="form-signin" role="form" action="/login" method="post">
<div style="display:none;"><input id="csrf_token" name="csrf_token" type="hidden" value="1457326344##3036eeab4ffa39494ee92247925a30a88a69432f"><input id="next" name="next" type="hidden" value=""></div>
<div class="form-group">
<label for="email">Email Address</label>
<input class="form-control" id="email" name="email" type="text" value="">
</div>
<div class="form-group">
<label for="password">Password</label>
<input class="form-control" id="password" name="password" type="password" value="">
</div>
<div class="form-group">
Remember me
</div>
<div class="form-group">
<input class="btn btn-primary btn-lg" id="submit" name="submit" type="submit" value="Login">
</div>
</form>
奇怪的是,如果我尝试将{{ form.remember_me.label }}
添加到模板中,我会得到jinja2.exceptions.UndefinedError: 'flask_security.forms.LoginForm object' has no attribute 'remember_me'
的异常。
我也遇到过一些提及自定义小部件的解决方案,但我真的希望听到我不必为简单的单一复选框走这条路。
我做错了什么?如果没有,那么最短,最无痛的方法是什么?
~~~~更新~~~~
看起来这里有一些奇怪的行为。字段form.remember
似乎会生成一个复选框,而form.remember.label
会生成默认值&#34;记住我&#34;标签。使用任何其他名称会导致上述异常发生。
答案 0 :(得分:0)
我最终发现了我的错误。导入from security import *
导致烧瓶安全模板LoginForm
进入我的命名空间,导致奇怪的行为。我还需要对表单进行一些更改,从Form
导入flask.ext.wtf
,但从wtforms
导入其余字段。希望它对某人有帮助!