【问题标题】:Using Tagging and Autopopulate with Flask使用 Flask 标记和自动填充
【发布时间】:2017-05-26 16:25:42
【问题描述】:

我正在努力思考如何将标记系统与 Flask 和 WTForms 一起使用。

基本上我有一个关键字列表。这些关键字具有层次结构(例如:我选择 Chicago。Illinois 和 USA 会自动添加作为附加关键字)。

所以我正在尝试寻找一种方法让用户输入自动填充列表。然后此表单生成关键字并将其带回烧瓶中,其中每个关键字用作它自己的变量。

使用 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'  

【问题讨论】:

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


    【解决方案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]"。考虑到可用的 js 框架,您应该最了解如何创建输入及其 ID。

    注意tag_id = IntegerField(widget=HiddenInput(), default=0) 不是接收 POST 输入所必需的,但如果您将标签存储在数据库中,然后想要使用存储的标签填充表单,则它很有用。

    【讨论】:

    • 如果some_tags.data 是一个列表,if form.some_tags.data 将是在views.py 中表达测试的更通俗的方式。
    猜你喜欢
    • 2018-12-31
    • 2012-10-09
    • 1970-01-01
    • 2017-03-23
    • 2014-10-21
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多