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

如何在Flet_Routing中使用page.go()实现页面间变量传递?

在Flet的flet_routing中通过page.go传递变量的方法

当然可以传递变量,没有直接的page.go('/new_page', 变量)写法,但有三种常用实现方式:

1. URL查询参数拼接

把变量以键值对形式拼在URL末尾,新页面通过解析URL获取参数:

当前页面跳转代码:

# 传递用户名和分数
page.go('/new_page?username=PyTom&score=90')

新页面解析参数:

from urllib.parse import parse_qs, urlparse
import flet as ft

def new_page(page: ft.Page):
    # 解析当前路由的查询参数
    url_components = urlparse(page.route)
    params = parse_qs(url_components.query)
    # 提取参数(默认值处理避免空值报错)
    username = params.get('username', [''])[0]
    score = params.get('score', ['0'])[0]
    
    page.add(ft.Text(f"欢迎 {username},你的测试分数是 {score}"))

2. 使用page.session共享数据

Flet的page.session是跨页面的键值存储,适合传递复杂对象(比如字典、自定义类实例):

当前页面存储数据:

# 存入用户信息
page.session.set('user_info', {'name': 'PyTom', 'age': 30, 'is_vip': True})
page.go('/new_page')

新页面读取数据:

import flet as ft

def new_page(page: ft.Page):
    # 取出存储的信息,默认空字典避免KeyError
    user_info = page.session.get('user_info', {})
    page.add(
        ft.Text(f"姓名:{user_info.get('name')}"),
        ft.Text(f"年龄:{user_info.get('age')}"),
        ft.Text(f"VIP状态:{'是' if user_info.get('is_vip') else '否'}")
    )

3. 路由路径参数(固定位置变量)

如果变量是页面的标识性参数(比如用户ID、商品ID),可以在路由定义时设置占位符,跳转时传入具体值:

路由定义:

from flet_routing import Routing, Route
import flet as ft

def home_page(page: ft.Page):
    page.add(ft.ElevatedButton("查看用户123", on_click=lambda _: page.go('/user/123')))

def user_profile(page: ft.Page, user_id: str):
    page.add(ft.Text(f"当前查看用户ID:{user_id}"))

# 初始化路由时定义带参数的路径
router = Routing(
    page=page,
    routes=[
        Route('/', home_page),
        Route('/user/{user_id}', user_profile),  # {user_id}是占位符
    ]
)

跳转时直接传入参数值:

page.go('/user/123')

这三种方式各有适用场景:

  • 查询参数:适合传递多个可选的简单参数
  • session存储:适合传递复杂数据或需要跨多个页面保留的状态
  • 路径参数:适合传递页面的核心标识参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:33:25