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

时间:2020-08-25 10:48:01

标签: python flask flask-wtforms

我正在尝试使用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")

1 个答案:

答案 0 :(得分:2)

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

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

没有默认值:

enter image description here

默认#ff00ff

enter image description here

这是一个好奇的人尝试的最小示例:

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的答案会更深入。