WTForms: come eseguire il rendering di un widget HTML5?

Aug 24 2020

Sto cercando di utilizzare il campo di input del colore di WTForms.

Ecco come definisco il modulo:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()

Questa è la vista:

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

Nel mio modello Jinja2 (colours_edit.html) faccio questo:

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

Tuttavia, non rende un selettore di colori HTML come previsto, invece lo vedo nell'HTML renderizzato:

<wtforms.widgets.html5.ColorInput object at 0x10b836e90> Scegli un colore qui

Perché l'input non viene visualizzato?

Risposte

1 caspii Aug 25 2020 at 01:32

L'ho risolto. Ci sono stati 2 problemi con il mio codice:

Mi mancava () qui:

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

Il modulo dovrebbe apparire così:

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

Da questa risposta di Stackoverflow .

Infine, devo dire che la documentazione di WTForms non è molto buona su questo. Alcuni esempi aiuterebbero sicuramente.