【问题标题】:Custom Dynamic Flask WTForm自定义动态烧瓶 WTForm
【发布时间】:2019-07-19 17:45:03
【问题描述】:

我正在尝试构建一个 WTForm 以将元素添加到 SQLite 表中。该表只有两个列(id 和 name)

routes.py:

@app.route('/systems', methods=['GET', 'POST'])

def systems():

    form = SystemForm()
    if form.validate_on_submit():
        system = Systems(name=form.systemname.data)
        db.session.add(system)
        db.session.commit()
        return redirect(url_for('systems'))
    return render_template('systems.html', title='Systems', form=form)

forms.py:

class SystemForm(FlaskForm):

    systemname = StringField('System', validators=[DataRequired()])
    submit = SubmitField('Add')

但是在表格之前我想显示表格中已经存在的所有行:

  • 系统 1
  • 系统 2 ....

    文本字段/提交按钮

假设我可以通过以下方式获取行,我该如何实现:

database = "mydb.db"
conn = create_connection(database)
cur = conn.cursor()

cur.execute("SELECT * FROM systems")
data = cur.fetchall()

将列表作为表单定义的一部分吗?或者可以放在表单标记之前,如下所示(作为从 sqlite 查询返回的行的数据):

    {% for item in data %}
        <table>
        <tr>
            <td>{{item[1]}}</td>
        </tr>
        </table>
    {% endfor %}

如何将数据传递给 html 模板?

【问题讨论】:

    标签: sqlite flask jinja2 flask-wtforms


    【解决方案1】:

    看来你已经什么都做了,唯一要做的就是;

    @app.route('/systems', methods=['GET', 'POST'])
    def systems():
        form = SystemForm()
        if form.validate_on_submit():
            system = Systems(name=form.systemname.data)
            db.session.add(system)
            db.session.commit()
            return redirect(url_for('systems'))
        # perform your database lookup to get `data`
        return render_template('systems.html', title='Systems', form=form, data=data)
    

    【讨论】:

    • 谢谢我也实现了上面的删除功能
    【解决方案2】:
    @app.route('/systems', methods=['GET', 'POST'])
    
    def systems():
        if request.method == 'POST':
            if request.form.get('submit') == 'Add':
                form = SystemForm()
                if form.validate_on_submit():
                    system = Systems(name=form.systemname.data)
                    db.session.add(system)
                    db.session.commit()
                    return redirect(url_for('systems'))
            else:
                delete_ids = request.form.getlist('delete_id')
                for delete_id in delete_ids:
                    db.session.query(Systems).filter(Systems.id==delete_id).delete()
                db.session.commit()
    
        data = db.session.query(Systems)
        form = SystemForm()
        return render_template('systems.html', title='Systems', form=form, data=data)
    

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2023-04-03
      • 2017-09-20
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多