WTForms:HTML5ウィジェットをレンダリングする方法は?

Aug 24 2020

WTFormsの色入力フィールドを使用しようとしています。

これが私がフォームを定義する方法です:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()

これはビューです:

@app.route("/colours/<token>/", methods=['GET', 'POST'])
def edit_colours(token):
   form = ColoursForm(request.form)
   if request.method == 'GET':
       return render_template('colours_edit.html', form=form, token=token)
   else:  # Request = post

      return redirect(url_for('view_scoreboard', token=token))

私のJinja2テンプレート(colours_edit.html)でこれを行います:

<p> {{ form.background_color }} Pick a color here </p>

ただし、期待どおりにHTMLカラーピッカーがレンダリングされません。代わりに、レンダリングされたHTMLに次のように表示されます。

<wtforms.widgets.html5.ColorInputオブジェクト(0x10b836e90)>ここで色を選択します

入力がレンダリングされないのはなぜですか?

回答

1 caspii Aug 25 2020 at 01:32

私はそれを解決しました。私のコードには2つの問題がありました:

ここに()がありませんでした:

<p> {{ form.background_color() }} Pick a color here </p>

フォームは次のようになります。

class ColoursForm(Form):
"""Used when editing scoreboard colours"""
   background_color = StringField(widget=ColorInput())

このStackoverflowの回答から。

最後に、WTFormsのドキュメントはこれに関してあまり良くないことを言わなければなりません。いくつかの例は確かに役立ちます。