我正在开发一个新的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/": [ ... ]
.
.
.
}
答案 0 :(得分:1)
经过一番挖掘,dir()
和pdb
后,我想出了一个解决方案。它使用递归策略搜索URL,直到找到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