使用标记和自动填充Flask

时间:2017-01-11 18:40:50

标签: python flask jquery-select2 select2 flask-wtforms

我试图围绕如何使用Flask和WTForms的标记系统。

基本上我有一个关键字列表。这些关键字具有层次结构(例如:我选择芝加哥。伊利诺伊州和美国自动添加作为附加关键字)。

所以我正在尝试为用户找到一种输入自动填充列表的方法。然后,此表单生成关键字并将其重新置于烧瓶中,其中每个关键字都用作自己的变量。

使用WTForms,我们需要将“id”带回Flask,但是像taggle.js或select2 那样我们如何将每个标签分成它自己的id?或者有更好的方法这个怎么样? autocomplete form

烧瓶

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'  

1 个答案:

答案 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),但如果您将标记存储在数据库中以后想要使用存储的标记填充表单,则此选项很有用。