我正在努力找出如何实现与表中另一个元素关联的惟一表单字段实例。下面是一个人为的例子:
from flask import Flask, render_template, request
from flask.ext.wtf import Form
from wtforms import TextField, BooleanField
app = Flask(__name__)
app.debug = True
app.config['SECRET_KEY'] = 'secret'
class Person(Form):
fname = TextField('First Name')
phone = TextField('Phone Number')
email = TextField('Email Address')
active = BooleanField('Active')
@app.route("/", methods=['GET', 'POST'])
def guest():
names = ['Bob', 'Joe', 'Jason', 'John'] # this could be a list, or data returned from a db query, previous POST data, or whatever
form = Person()
if request.method == 'POST' and form.validate_on_submit():
return str(form.data)
return render_template('index.html', names=names, form=form)
if __name__ == "__main__":
app.run(host='0.0.0.0')
我的模板:
^{pr2}$在 在
很明显,在HTML中,每个表行中每个输入元素的name
参数都是相同的,因为使用的是同一个表单字段,所以在“POST”中,如果输入电话号码,那么该电话号码现在将填充到表中的所有名称行中。“激活”复选框也是如此。我还尝试生成一个表单实例的列表并将该列表传递到模板中,但它似乎没有像我预期的那样工作。在这一点上,我的选择似乎是:
我知道,我可以通过模板将<input type>
元素手动创建到表中,并基于w
为它们分配不同的名称/id,但这感觉不太习惯,而且我必须自己在验证中编写代码。在
通常,您会将包含表单数据的multi dict对象作为表单的第一个参数传入:
这确实要求
POST
数据与表单中的小部件匹配;每个小部件都将检查多个dict,并使用一些预填充的数据提取出需要呈现的内容。在或者,可以将值作为关键字参数传入,但这需要您自己验证输入,将任何值转换为正确的类型:
^{pr2}$请参阅文档中的How Forms get data。在
如果您需要在一个页面中从同一个表单对象生成多个表单,每个表单都是唯一的,那么您需要给每个表单一个带有
Form(prefix=..)
参数的唯一前缀。在相关问题 更多 >
编程相关推荐