Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中实现动态路由?_Python_Function_Dynamic_Parameters_Routing - Fatal编程技术网

如何在Python中实现动态路由?

如何在Python中实现动态路由?,python,function,dynamic,parameters,routing,Python,Function,Dynamic,Parameters,Routing,我正在尝试为web框架实现动态路由。目前,目标是通过url将参数传递到函数中。因此,如果用户提供的url为“/page/23”,则路由函数将提取“23”,然后将其用作页面函数的参数。然而,我得到了一个“钥匙错误” import re routing_table = {} url = "/page/23" def route(url, func): key = url key = re.findall(r"(.+?)/<[a-zA-Z_][a-zA-Z0-9_]*>",

我正在尝试为web框架实现动态路由。目前,目标是通过url将参数传递到函数中。因此,如果用户提供的url为“/page/23”,则路由函数将提取“23”,然后将其用作页面函数的参数。然而,我得到了一个“钥匙错误”

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])
重新导入
路由_表={}
url=“/page/23”
def路由(url,func):
key=url
key=re.findall(r“(.+?)/”,url)
如果键为:
params=re.findall(r“”,url)
路由表[键[0]]=[参数,函数]
其他:
路由表[url]=func
def查找路径(url):
如果路由表中的url为:
返回路由表[url]
其他:
一无所获
def页面(页面id):
返回“这是第%d页”%page\u id
路线(“/page/”,第页)
打印(路由表[url])

当您调用
路由时,您使用的
url
等于
“/page/”
,但在最后一行,
url
是一个全局变量,等于
“/page/23”

看起来还有其他问题:将最后一行替换为

print(routing_table)

看看你在做什么。

我照你说的做了,删除了全局url变量,并打印了(路由表)。当我打印最后一行时,它显示:{'/page':[['page_id'],]},因此,我可以看到url键映射到一个包含变量和函数的列表。但我不确定如何将该变量传递到函数中。