Flask 按钮将变量传递回 python

M L*_*ard 6 html python flask

我发现了很多与此类似的内容,但我只是无法让它发挥作用。基本上,我有一个按钮,按下它后,我想将该值发送回我的烧瓶后端。

HTML 按钮:

<form action="" method="POST" ><button class="btn btn-danger" type="submit" name="delete" value="{{  item2  }}"><span class="glyphicon glyphicon-trash"></span> Delete</button> </form>
Run Code Online (Sandbox Code Playgroud)

Python:

@app.route('/', methods=["GET","POST"])
def home():    
    if request.method == 'POST':
        if request.form['delete'] == post_id:
            (my sql login/cursor stuff....)
            sql = "DELETE FROM test_table WHERE post_id = ?"
            c.execute(sql, (post_id,))
            return redirect("/")
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用 jinja 填充链接(以及后续变量)。它按应有的方式填充了按钮,但将其发送回我的 python 脚本不起作用。

更新: 当我运行此命令时,出现内部服务器错误。我看不到路由错误是什么,因为我无法让调试工作(使用 wsgi/werkzeug)。

我认为我们可以得出结论说,不定义post id就是它不起作用的原因。所以我的问题是,当按钮将数据发送回 python 时,python 会获取什么值(以及如何获取)?是它name=还是value=别的什么?

fur*_*ras 5

你的问题是

request.form['delete'] == post_id 
Run Code Online (Sandbox Code Playgroud)

您从按钮 ( ) 获取值request.form['delete']并尝试与post_id不存在的变量中的值进行比较。

如果你想从按钮获取值并分配给变量post_id那么你需要

post_id = request.form['delete']
Run Code Online (Sandbox Code Playgroud)

或者

post_id = request.form.get('delete')
Run Code Online (Sandbox Code Playgroud)

然后就可以post_id在SQL查询中使用了。

@app.route('/', methods=["GET","POST"])
def home():    
    if request.method == 'POST':

        post_id = request.form.get('delete')

        if post_id is not None:
            (my sql login/cursor stuff....)
            sql = "DELETE FROM test_table WHERE post_id = ?"
            c.execute(sql, (post_id,))
            return redirect("/")
Run Code Online (Sandbox Code Playgroud)