WTForms: Jak renderować widżet HTML5?

Aug 24 2020

Próbuję użyć pola wejściowego koloru WTForms.

Oto jak definiuję formę:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()

Oto pogląd:

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

W moim szablonie Jinja2 (colours_edit.html) robię to:

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

Jednak nie renderuje selektora kolorów HTML zgodnie z oczekiwaniami, zamiast tego widzę to w renderowanym HTML:

<wtforms.widgets.html5.ColorInput obiekt pod adresem 0x10b836e90> Wybierz tutaj kolor

Dlaczego dane wejściowe nie są renderowane?

Odpowiedzi

1 caspii Aug 25 2020 at 01:32

Rozpracowałem to. Wystąpiły 2 problemy z moim kodem:

Brakowało () tutaj:

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

Formularz powinien wyglądać następująco:

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

Z tej odpowiedzi Stackoverflow .

Na koniec muszę powiedzieć, że dokumentacja WTForms nie jest w tym zbyt dobra. Kilka przykładów z pewnością by pomogło.