WTForms:如何为 HTML5 小部件设置默认值?

WTForms: how do I set a default value for an HTML5 Widget?

我正在尝试使用 WTForms 颜色输入字段。

如何为输入字段设置默认值(例如 #ff0000)?

我是这样定义表格的:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = StringField(widget=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>

一切正常,但我不知道如何设置默认值。 不起作用 的形式是:

background_color = StringField(widget=ColorInput(), default="#ff00ff")

执行此操作的一种方法是检查然后在您的视图中设置数据值。请注意获取表单后的两条新行:

@app.route("/colours/<token>/", methods=['GET', 'POST'])
def edit_colours(token):
   form = ColoursForm(request.form)
   if not form.background_color.data:
       form.background_color.data = "#ff00ff"
   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))

无默认:

默认#ff00ff

这里有一个最简单的例子,供有兴趣尝试的其他人使用:

from flask import Flask, request, render_template
from wtforms.widgets.html5 import ColorInput
from wtforms import Form, StringField


class ColoursForm(Form):
    background_color = StringField(widget=ColorInput())


app = Flask(__name__)


@app.route("/")
def edit_colours():
    form = ColoursForm()
    if not form.background_color.data:
        form.background_color.data = "#ff00ff"
    if request.method == "GET":
        return render_template("colors_edit.html", form=form)

colors_edit.html和OP一样(一定要放在templates文件夹下):

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

我不知道为什么您第一次尝试设置默认值不起作用。也没有为我工作。似乎应该如此。 This 答案深入一点。