我正在尝试更新名为“收藏夹”的数据库值''对于使用按钮单击的Flask Web应用程序的登录用户。从本质上讲,收藏夹列是一个单独的字符串,如下所示:Apples, Bananas, Oranges
在按钮单击的位置,我想通过将字符串拆分为一个列表来追加一个值(比如Cherries
) @app.routes()
,附加值,并在提交更改之前将其重新加入字符串。我不确定这样做的正确方法,这就是我所拥有的:
HTML代码段
<button action="{{ url_for('add') }}" method="post" type="submit">Favorite</button>
@ app.routes()
@app.route('/add', methods=['POST'])
def add():
star_faves = current_user.favorites
star_faves_list = star_faves.split(', ')
star_faves_list.append('Cherries')
', '.join(star_faves_list)
current_user.favorites = star_faves_list
db.session.commit()
return render_template('add.html')
问题在于我并不真正理解HTML如何与Python / Jinja进行通信,如果有人能帮助清除它,我会非常感激。
答案 0 :(得分:1)
看起来你的某些元素很混乱。
如果您要向/add
页面提交POST请求,最简单的方法是创建表单。 (按钮没有动作或方法属性,表单可以。)创建表单时,还要指定提交表单时要使用的HTTP方法。所以在你的情况下,它看起来应该是这样的:
<form action="{{ url_for('add') }}" method="POST">
<input type="submit" value="Favorite">
</form>
您可以使用按钮代替带有提交类型的输入,它们是interchangeable。
如果您不希望在提交请求时重新加载页面,则可以使用JavaScript的更高级技术称为AJAX。
此示例代码将相同的POST请求发送到/add
页面:
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
// this method gets called if the state of the request changes (it succeeds of fails)
// you will probably want to update your page accordingly here
};
request.open('POST', '/add');
request.send();