You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Flask中通过HTML链接将警员ID传递至Python函数?

解决Flask中通过HTML链接传递警员ID到Python函数的问题

嘿,我来帮你搞定这个需求!首先咱们先梳理下当前代码里的小问题,再一步步完善功能。

第一步:修正HTML标签的嵌套错误

你的HTML代码里标签顺序有点问题,<a><div>的闭合逻辑不对,导致按钮显示可能异常。修正后的代码应该是这样的:

<ul class="list-group">
    {% for p in policemen %}
        <li class="list-group-item">
            {{ " "~ p.rank ~" "}}
            <div class="col-md-2 text-center">
                <a href='/deletepolice/{{p.id}}' class="btn btn-primary btn-lg">Delete ?</a>
            </div>
        </li>
    {% endfor %}
</ul>

我把<a>标签的内容Delete ?移到了标签内部,同时确保<div>正确包裹住按钮,这样样式和点击区域才会正常。

第二步:编写Flask的路由函数接收ID

接下来你需要在Python代码里定义对应的路由,来捕获URL里的警员ID,然后执行删除逻辑。示例代码如下:

from flask import Flask, render_template, redirect, url_for
# 如果你用数据库的话,导入对应的模型类,比如:
# from your_model_file import Policeman, db

app = Flask(__name__)

# 假设这是展示警员列表的路由
@app.route('/policemen')
def show_policemen():
    # 从数据库获取警员列表,示例:
    # policemen = Policeman.query.all()
    policemen = [{"id": 1, "rank": "警长"}, {"id": 2, "rank": "警员"}]  # 模拟数据
    return render_template('your_template.html', policemen=policemen)

# 接收删除请求的路由,<int:police_id>是类型转换器,确保ID是整数
@app.route('/deletepolice/<int:police_id>')
def delete_police(police_id):
    # 这里写删除逻辑,比如用SQLAlchemy的话:
    # police_to_delete = Policeman.query.get_or_404(police_id)
    # db.session.delete(police_to_delete)
    # db.session.commit()
    
    # 模拟删除操作,打印ID
    print(f"准备删除ID为{police_id}的警员")
    
    # 删除后重定向回警员列表页面
    return redirect(url_for('show_policemen'))

if __name__ == '__main__':
    app.run(debug=True)

额外建议:用POST请求处理删除操作

虽然上面的GET请求能实现功能,但删除这类修改数据的操作更适合用POST请求,避免误触(比如浏览器刷新、书签误点)。如果想优化,可以改成这样:

修正后的HTML(用表单发送POST)

<ul class="list-group">
    {% for p in policemen %}
        <li class="list-group-item">
            {{ " "~ p.rank ~" "}}
            <div class="col-md-2 text-center">
                <form action='/deletepolice/{{p.id}}' method="POST">
                    <button type="submit" class="btn btn-primary btn-lg">Delete ?</button>
                </form>
            </div>
        </li>
    {% endfor %}
</ul>

对应的Flask路由(修改为POST方法)

from flask import request

# 只接受POST请求的路由
@app.route('/deletepolice/<int:police_id>', methods=['POST'])
def delete_police(police_id):
    # 删除逻辑和之前一样
    print(f"准备删除ID为{police_id}的警员")
    # db操作...
    return redirect(url_for('show_policemen'))

这样就更安全啦!

内容的提问来源于stack exchange,提问作者Mido

火山引擎 最新活动