You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中如何获取URL参数ID并直接传递至其他函数?

在Flask中无需手动传参共享路由URL参数的方法

首先要明确:你原来的代码里全局调用some_function()是错误的——此时Flask还未处理任何请求,根本不存在URL中的id参数,必须在路由函数内部调用some_function,因为路由函数是在请求到达时才执行的,这时候才能拿到id。

下面是两种可行的解决方案:

方案一:直接传递参数(推荐,简洁清晰)

这是最直观且易维护的方式,直接在路由函数中将id传给some_function:

from flask import Flask
app = Flask(__name__)

# 模拟vid_stream实现
class VidStream:
    def get_hls_url(self, video_id):
        return f"https://example.com/hls/{video_id}.m3u8"

vid_stream = VidStream()

@app.route('/<id>')
def give_id(id):
    # 在路由内调用some_function并传入id
    variable1 = some_function(id)
    print(variable1)
    return id

def some_function(video_id):
    # 直接使用传入的参数调用方法
    return vid_stream.get_hls_url(video_id)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

方案二:使用Flask的g对象(请求级全局变量)

如果需要在多个函数间共享请求级别的数据,且不想显式传参,可以用Flask内置的g对象,它会在单个请求的生命周期内存储数据:

from flask import Flask, g
app = Flask(__name__)

# 模拟vid_stream实现
class VidStream:
    def get_hls_url(self, video_id):
        return f"https://example.com/hls/{video_id}.m3u8"

vid_stream = VidStream()

@app.route('/<id>')
def give_id(id):
    # 将id存入g对象
    g.video_id = id
    variable1 = some_function()
    print(variable1)
    return id

def some_function():
    # 从g对象中取出id
    return vid_stream.get_hls_url(g.video_id)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

方案对比

  • 方案一:代码可读性强,逻辑清晰,没有额外的上下文依赖,是首选方案。
  • 方案二:适合复杂场景下跨多个函数共享请求数据,但会增加代码耦合度,调试成本更高,非必要不推荐使用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:35:24