将 Django urlpatterns 转换为字典
Convert Django urlpatterns to dictionary
我正在开发一个新的 Django 项目并使用 Django REST Framework 构建一个 API。我正在尝试启用一个 只有在 DEBUG=True
时才可访问的视图,它将序列化当前的 urlpatterns 并将它们作为 JSON 发回,以便前端开发人员可以工作有了它。
我正在寻找一种干净的方法来做到这一点。我可以遍历每个模式,但一个模式可能有无限数量的子模式,所以我需要一些可以处理它的方法。
有内置的东西吗?除了暴力破解 URL 之外还有什么办法吗?我可以从头开始编写,但必须有更好的方法,因为 Django 404 页面包含此信息。我也会深入研究该源代码。
注意:复杂性和安全性不是问题,因为整个视图仅在系统处于 DEBUG
时可用。
我正在寻找的结果类似于:
{
"^admin/": [
"^$ [name='index']",
"^admin/ ^login/$ [name='login']",
"^admin/ ^logout/$ [name='logout']",
...
],
"^auth/": [ ... ]
.
.
.
}
经过一番挖掘,dir()
,pdb
,我想出了一个解决方案。它使用递归策略搜索 URLS,直到找到 RegexURLPattern,并在那里终止。这适用于我的 URL 设置,但我不确定它对于复杂的 url 配置有多稳健。仍然有兴趣听取其他想法!
def recursively_build__url_dict(d, urlpatterns):
for i in urlpatterns:
if isinstance(i, RegexURLResolver):
d[str(i.__dict__['_regex'])] = {}
recursively_build__url_dict(
d[str(i.__dict__['_regex'])], i.url_patterns
)
elif isinstance(i, RegexURLPattern):
d[str(i.regex.pattern)] = i.callback.__name__
编辑:我把它变成了 gist
我正在开发一个新的 Django 项目并使用 Django REST Framework 构建一个 API。我正在尝试启用一个 只有在 DEBUG=True
时才可访问的视图,它将序列化当前的 urlpatterns 并将它们作为 JSON 发回,以便前端开发人员可以工作有了它。
我正在寻找一种干净的方法来做到这一点。我可以遍历每个模式,但一个模式可能有无限数量的子模式,所以我需要一些可以处理它的方法。
有内置的东西吗?除了暴力破解 URL 之外还有什么办法吗?我可以从头开始编写,但必须有更好的方法,因为 Django 404 页面包含此信息。我也会深入研究该源代码。
注意:复杂性和安全性不是问题,因为整个视图仅在系统处于 DEBUG
时可用。
我正在寻找的结果类似于:
{
"^admin/": [
"^$ [name='index']",
"^admin/ ^login/$ [name='login']",
"^admin/ ^logout/$ [name='logout']",
...
],
"^auth/": [ ... ]
.
.
.
}
经过一番挖掘,dir()
,pdb
,我想出了一个解决方案。它使用递归策略搜索 URLS,直到找到 RegexURLPattern,并在那里终止。这适用于我的 URL 设置,但我不确定它对于复杂的 url 配置有多稳健。仍然有兴趣听取其他想法!
def recursively_build__url_dict(d, urlpatterns):
for i in urlpatterns:
if isinstance(i, RegexURLResolver):
d[str(i.__dict__['_regex'])] = {}
recursively_build__url_dict(
d[str(i.__dict__['_regex'])], i.url_patterns
)
elif isinstance(i, RegexURLPattern):
d[str(i.regex.pattern)] = i.callback.__name__
编辑:我把它变成了 gist