Flask:如何在数据从子页面保存到db后,在主页上用SQLite更新HTML表格?

时间:2015-11-16 20:04:54

标签: python html sqlite flask html-table

我在index.html中的html表中更新数据后遇到问题我在add.thml中输入

我的主页只有表

{% block body %}
    <h1>Project</h1>
    {{ table }}        
{% endblock %}

flask_table库创建 - 它只是将SQLite数据库中的数据放入html表中。

items = Package.select(Package)
table = ItemTable(items)

def populate_table(table):
    items = Package.select(Package)
    table = ItemTable(items)
    return table

我从名为add

的子页面获取此html表单中的数据
 <form action=" {{ url_for('save') }}" method="POST">
    Name: <input type="text" name="name">
    <br>
    Dimensions: <input type="text" name="dimensions">
    <br>
    Weight: <input type="text" name="weight">
    <br>
    Status: <input type="text" name="status">
    <input type="submit" name="my-form" value="Submit">
</form>

然后点击提交后我运行保存

@fproject.route('/save', methods=['POST'])
def save():
    text.append(request.form['name'])
    text.append(request.form['dimensions'])
    text.append(request.form['weight'])
    text.append(request.form['status'])
    add_package.add_package_values(text)
    add_package.add_package_to_db(new_package)
    populate_table(table)

    del text[3]
    del text[2]
    del text[1]
    del text[0]

    return redirect(url_for('index'))

它将用户输入的值保存到数据库中。然后它重定向到主页(index.html):

@fproject.route('/')
def index():
    context={'table': table}
    return render_template("index.html", **context)

问题是,当我回到index.html时,我无法看到我在add.html中输入的数据。它们在数据库中,但它们没有出现在表中。当我重新启动应用程序时,它们就在那里。但我需要他们立刻在那里。我试图将render_template(“index.html”)放入保存功能,但它仍然无效。我不知何故需要更新html表或再次渲染index.html(它将再次从db获取数据 - 以及我在add.html输入的新记录)

那个家伙怎么办?谢谢

1 个答案:

答案 0 :(得分:1)

save函数中,您不会在全局table变量中存储任何数据。像这样修改这个函数:

@fproject.route('/save', methods=['POST'])
def save():
    global table

    text.append(request.form['name'])
    text.append(request.form['dimensions'])
    text.append(request.form['weight'])
    text.append(request.form['status'])
    add_package.add_package_values(text)
    add_package.add_package_to_db(new_package)
    table = populate_table(table)

    return redirect(url_for('index'))

我添加了global table,您的populate_table函数有一个返回值,所以请使用它。