WTForms: ¿Cómo renderizar un widget HTML5?

Aug 24 2020

Estoy tratando de usar el campo de entrada de color de WTForms.

Así es como defino la forma:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()

Esta es 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))

En mi plantilla Jinja2 (colours_edit.html) hago esto:

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

Sin embargo, no representa un selector de color HTML como se esperaba, sino que veo esto en el HTML representado:

<wtforms.widgets.html5.ColorInput objeto en 0x10b836e90> Elija un color aquí

¿Por qué no se procesa la entrada?

Respuestas

1 caspii Aug 25 2020 at 01:32

Lo resolví. Hubo 2 problemas con mi código:

Me faltaba () aquí:

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

El formulario debe tener este aspecto:

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

De esta respuesta de Stackoverflow .

Finalmente, debo decir que la documentación de WTForms no es muy buena en esto. Ciertamente, algunos ejemplos ayudarían.