def get_api_root_view(self):
# callgraph:
# HybridRouter.get_urls
# DefaultRouter.get_urls
# HybridRouter.get_api_root_view
# Copy the following block from Default Router
api_root_dict = {}
list_name = self.routes[0].name
for prefix, viewset, basename in self.registry:
api_root_dict[prefix] = list_name.format(basename=basename)
# In addition to that:
api_view_urls = self._api_view_urls
class APIRoot(views.APIView):
_ignore_model_permissions = True
def get(self, request, *args, **kwargs):
ret = OrderedDict()
namespace = request.resolver_match.namespace
for key, url_name in api_root_dict.items():
if namespace:
url_name = namespace + ':' + url_name
try:
ret[key] = reverse(
url_name,
args=args,
kwargs=kwargs,
request=request,
format=kwargs.get('format', None)
)
except NoReverseMatch:
# Don't bail out if eg. no list routes exist, only detail routes.
continue
# In addition to what had been added, now add the APIView urls
for api_view_key in api_view_urls.keys():
# originally was: reverse(api_view_urls[api_view_key].name, request=request, format=format)
namespace = request.resolver_match.namespace
if namespace:
url_name = namespace + ":" + api_view_key
try:
ret[api_view_key] = reverse(
url_name,
args=args,
kwargs=kwargs,
request=request,
format=kwargs.get('format', None)
)
except NoReverseMatch:
continue
return response.Response(ret)
return APIRoot.as_view()
routers.py 文件源码
python
阅读 35
收藏 0
点赞 0
评论 0
评论列表
文章目录