首页 > 解决方案 > 如何在 Flask 中将数据从数据库发送到 html 表单进行编辑

问题描述

我正在尝试将数据从数据库发送到 Html 表单,但出现这样的错误

TypeError:“ImmutableMultiDict”对象是不可变的

这是用于编辑数据的烧瓶代码

@app.route('/edit-project/<string:id>', methods = ['GET', 'POST'])
def edit_project(id):

    project = Project.query.get(id)

    request.form['title'] = project.title
    request.form['link'] = project.link
    request.form['description'] = project.description

    if request.method == 'POST':

        title = request.form['title']
        link = request.form['link']
        description = request.form['description']
        image = request.files['image']

        image.save(os.path.join(app.config["IMAGE_UPLOADS"], 'project/'+ project.image))


    return render_template('project/edit_project.html')

Html 模板“edit_project.html”如下所示

<div class="container">
    <form method="POST" id="project-form" enctype="multipart/form-data">
        <div class="form-group">
            <input type="text" name="title" class="form-control" id="title" placeholder="Title">
        </div>
        <div class="form-group">
            <input type="text" name="link" class="form-control" id="title" placeholder="Project Link">
        </div>
        <div class="form-group">
            <label for="exampleFormControlTextarea1">Description</label>
            <textarea id = project-form name="description" class="form-control" id="description" rows="3"></textarea>
        </div>
        <div class="input-group" style="width: 30%;">
            <div class="input-group-prepend">
                <span class="input-group-text" id="inputGroupFileAddon01">Upload</span>
            </div>
            <div class="custom-file">
                <input type="file" name="image" class="custom-file-input" id="inputGroupFile01" aria-describedby="inputGroupFileAddon01">
                <label class="custom-file-label" for="inputGroupFile01">Upload image</label>
            </div>
        </div>
        <div class="form-group" style="padding-top: 2rem;">
            <button type="submit" class="btn btn-primary">Publish</button>
        </div>
    </form>
</div>

有什么方法可以在不使用 WTForms 的情况下在表单中显示数据,或者我必须使用 WTForms 吗?

提前致谢。

标签: htmlpython-3.xflaskflask-sqlalchemyflask-wtforms

解决方案


你可以使用 jinja 模板吗? render_template()接受数据参数。您可以将数据库中的数据传递给该调用,并使用 HTML 中的 jinja 模板来呈现它。设置输入的值就可以了。例如:您的数据是 data ={title:"apple"} 并且,return render_template("project/edit_project.html", data=data)将在 HTML 文件中为您提供数据对象。在那里,您可以像这样使用 jinja:

<div class="form-group">
    <input type="text" name="title" class="form-control" id="title" placeholder="Title" value={{data.text}}>
</div>

希望能帮助到你!


推荐阅读