直接上代码:
from django.urls import RegexURLPattern
def get_all_urls(patterns, pre_fix, is_firt_time=False,result=[]):
if is_firt_time:
result.clear()
for item in patterns:
# print(item ,type(item))
part = item._regex.strip('^$')
if isinstance(item, RegexURLPattern):
result.append(pre_fix + part)
else:
.get_all_urls( item.urlconf_name, pre_fix + part)
return result
使用:
get_all_urls(urlpatterns, pre_fix='/', is_firt_time=True)
说明:
从项目的urls.py中取urlpatterns所有路由;
循环,判断对象类型,如果有嵌套,类型不一样;
item._regx 取到路由名;
层级多的路由会嵌套外层前缀,因此需要拼接;
空列表作为函数形参时,如果不传值,列表内存地址不变;
strip(‘^$’) 会去除其中的任一字符
另外,如果再次访问该路由,值会重复(列表内存地址不变 )。增加状态判断,第一次执行时清空