WTForms: Wie rendere ich ein HTML5-Widget?

Aug 24 2020

Ich versuche, das Farbeingabefeld von WTForms zu verwenden.

So definiere ich das Formular:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()

Dies ist die Ansicht:

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

In meiner Jinja2-Vorlage (colours_edit.html) mache ich Folgendes:

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

Es wird jedoch kein HTML-Farbwähler wie erwartet gerendert, sondern ich sehe dies im gerenderten HTML:

<wtforms.widgets.html5.ColorInput-Objekt bei 0x10b836e90> Wählen Sie hier eine Farbe aus

Warum wird die Eingabe nicht gerendert?

Antworten

1 caspii Aug 25 2020 at 01:32

Ich habe es herausgefunden. Es gab 2 Probleme mit meinem Code:

Ich habe hier gefehlt ():

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

Das Formular sollte folgendermaßen aussehen:

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

Aus dieser Stackoverflow-Antwort .

Schließlich muss ich sagen, dass die WTForms-Dokumentation diesbezüglich nicht sehr gut ist. Einige Beispiele würden sicherlich helfen.