WTFormsを学ぶ その2
前回の続き。
WTFormsではフォームフィールドを最初から幾つか用意してある。自分でも作れるみたいだけど、今回はそこまでのものはいらないので、TextFieldを利用。ここで、躓いたのが属性値の追加はどうすればいいか。
前回のをそのまま利用するとおそらく、
<input id="email" name="email" type="text" value="">
みたいな感じになってると思う。
それで、WTForms Documentationを読んでみると、
form.field(class_="text_blob")
上記を記述すると、
<input type="text" name="field_name" value="blah" class="text_blob" id="field_name" />
こうなって、無事にclass="text_blob"が追加されるぜハハッ!って書いてあったので、試してみたけどうまく行かなかった。何がイケないというか勘違いしてたかというと、python内のプログラムをいじってたからでした。
実際にどういう勘違いかというと、
@app.route('/register', methods=['GET', 'POST']) def register(): form = Registration(request.form) if request.method == 'POST' and form.validate(): user = User(form.username.data, form.email.data, form.password.data) return redirect(url_for('login')) return render_template('register.html', form=form)
のところに追記すればいいと思っていて、うまく行かず・・・
実際には、
{% from "_formhelpers.html" import render_field %} <form method=post action="/register"> <dl> {{ render_field(form.username) }} {{ render_field(form.email) }} {{ render_field(form.password) }} {{ render_field(form.confirm) }} {{ render_field(form.accept_tos) }} </dl> <p><input type=submit value=Register> </form>
の部分で、
render_field(form.username, class_="name")
と書かないといけないようでした。また、マクロを介さずに、
form.username(class_="name")
とテンプレートに書いても大丈夫みたい。
大した事ではないけど、躓いたのでメモ。