我试图围绕如何使用Flask和WTForms的标记系统。
基本上我有一个关键字列表。这些关键字具有层次结构(例如:我选择芝加哥。伊利诺伊州和美国自动添加作为附加关键字)。
所以我正在尝试为用户找到一种输入自动填充列表的方法。然后,此表单生成关键字并将其重新置于烧瓶中,其中每个关键字都用作自己的变量。
使用WTForms,我们需要将“id”带回Flask,但是像taggle.js或select2 那样我们如何将每个标签分成它自己的id?或者有更好的方法这个怎么样?
烧瓶
class ReusableForm(Form):
example4 = StringField('example4')
@app.route("/editor", methods=['GET', 'POST'])
def hello():
form = ReusableForm(request.form)
if request.method == 'POST':
example4 = request.form['example4']
if form.validate():
# Return and do something with each keyword
# tag1 = 'Alaska'
# tag2 = 'Hawaii'
# tag3 = 'California'
答案 0 :(得分:1)
您需要使用一个动态表单,该表单将接受向Flask发布的可变数量的标签。
forms.py
:
class TagForm(NoCsrfForm):
tag_id = IntegerField(widget=HiddenInput(), default=0)
tag_name = StringField(widget=HiddenInput(), [InputRequired(), Length(max=256)])
class MyDynamicForm(Form):
some_field = StringField('Foo', [InputRequired()])
some_other_field = TextAreaField('Bar', [InputRequired()])
some_tags = FieldList(FormField(TagForm))
views.py
:
@app.route('/')
def index():
form = MyDynamicForm()
if form.validate_on_submit():
if len(form.some_tags.data) >= 1:
# Do something with the received tags.
pass
return render_template('index.html', form=form)
index.html
<input id="some_tags-0-tag_name"></input>
每个输入ID必须使用以下语法:"[some_tags]-[nth tag]-[tag_name]"
。您应该最好知道创建输入及其ID,同时考虑到您可用的js框架。
N.B。接收POSTed输入时不需要tag_id = IntegerField(widget=HiddenInput(), default=0)
,但如果您将标记存储在数据库中以后想要使用存储的标记填充表单,则此选项很有用。