我正在尝试为Web框架实现动态路由。目前,目标是通过url将参数传递给函数。因此,如果用户提供“/ page / 23”的URL,则路由功能将提取“23”,然后将其用作页面功能的参数。然而,我得到了一个“keyerror”。
import re
routing_table = {}
url = "/page/23"
def route(url, func):
key = url
key = re.findall(r"(.+?)/<[a-zA-Z_][a-zA-Z0-9_]*>", url)
if key:
params = re.findall(r"<([a-zA-Z_][a-zA-Z0-9_]*)>", url)
routing_table[key[0]] = [params, func]
else:
routing_table[url] = func
def find_path(url):
if url in routing_table:
return routing_table[url]
else:
return None
def page(page_id):
return "this is page %d" % page_id
route("/page/<page_id>", page)
print(routing_table[url])
答案 0 :(得分:1)
当您致电route
时,您使用的url
等于"/page/<page_id>"
,但在最后一行中,url
是一个等于"/page/23"
的全局变量
看起来还有其他问题:用
替换你的最后一行print(routing_table)
看看你在做什么。