如何在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
相关产品推荐
相关产品推荐

