学んだことをメモする日記

主にpythonについて自分が学んだことについてのメモ帳。理解が深まればいいんだけれども・・・

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")

とテンプレートに書いても大丈夫みたい。

大した事ではないけど、躓いたのでメモ。

続く。
WTFormsを学ぶ その3 - 学んだことをメモする日記