Python Flet中如何拆分路径与查询参数?路由匹配参数分离问题
解决Flet中路由查询参数分离与匹配问题
问题核心
当访问带查询参数的路由(如/page1?test=123)时,page.route是包含查询参数的完整字符串,导致你的match "/page1"匹配失败,无法执行后续获取page.query的代码。同时page.path是Flet提供的、自动剥离查询参数的路径字符串,可以直接用于路由匹配。
修正方案1:使用page.path进行路由匹配
page.path会自动忽略?后的查询参数,直接返回纯路径部分,适合用于match匹配:
import flet as ft import flet_fastapi async def main(page: ft.Page): async def route_change(route): page.views.clear() # 改用page.path做匹配,自动剥离查询参数 match page.path: case "/page1": page.views.append(ft.View("/page1", [ ft.Text("page1") ])) print("---") # page.query是解析好的参数字典,直接通过key获取值 print(page.query.get("test")) print("---") def view_pop(view): page.views.pop() top_view = page.views[-1] page.go(top_view.route) page.on_route_change = route_change page.on_view_pop = view_pop await page.go_async(page.route) app = flet_fastapi.app(main)
修正方案2:手动拆分page.route获取纯路径
如果坚持使用page.route,可以手动拆分字符串剥离查询参数:
async def route_change(route): page.views.clear() # 拆分路由字符串,取?前的纯路径部分 base_route = page.route.split('?')[0] match base_route: case "/page1": page.views.append(ft.View("/page1", [ ft.Text("page1") ])) print("---") print(page.query.get("test")) print("---")
补充说明
page.query是Flet自动解析后的字典,只要访问的URL包含?key=value格式的参数(如http://localhost:8000/page1?test=hello),就能直接通过page.query.get("key")获取对应的值。- 确保跳转或访问的URL格式正确,查询参数需以
?开头,多个参数用&分隔(如/page1?test=hello&name=alex)。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

