无法在Flask WTF中获得单个复选框以进行渲染

时间:2016-03-07 03:34:55

标签: flask flask-wtforms

我一直在寻找关于如何使用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>

在表单的最终输出中,缺少复选框:

enter image description here

如果我看到生成的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;标签。使用任何其他名称会导致上述异常发生。

1 个答案:

答案 0 :(得分:0)

我最终发现了我的错误。导入from security import *导致烧瓶安全模板LoginForm进入我的命名空间,导致奇怪的行为。我还需要对表单进行一些更改,从Form导入flask.ext.wtf,但从wtforms导入其余字段。希望它对某人有帮助!