[英]Django given URL path name get URL
我正在尝试创建一个视图,该视图将列出服务器上可用的 URL。
给定一个 url 路径,如下所示:
path(r'reindex_search', views.IndexView.as_view(), name='reindex')
在给定名称“reindex”的情况下,如何从views.py 中获取完整路径(例如“http://localhost:8000/reindex_search”)?
我尝试使用 rest_framework.reverse ,它适用于我的一些端点,但在路径中有变量的 url 上失败。 到目前为止,这是我的尝试:
网址.py
api_root_dict = OrderedDict()
...
api_root_dict['reindex_search'] = 'reindex'
...
urlpatterns = [
...
path(r'reindex_search', views.IndexView.as_view(), name='reindex'),
path('api/', views.HomeView.as_view(api_root_dict=api_root_dict), name='home'),
...
视图.py
class HomeView(APIView):
api_root_dict = None
def get(self, request, *args, **kwargs):
ret = OrderedDict()
namespace = request.resolver_match.namespace
for key, url_name in self.api_root_dict.items():
if namespace:
url_name = namespace + ":" + url_name
try:
ret[key] = {
'href': reverse(
url_name,
args=args,
kwargs=kwargs,
request=request,
format=kwargs.get('format', None)
)
}
except NoReverseMatch:
continue
home_url = reverse(viewname='home', request=request)
obj = {
'_links': {
'self': {"href": home_url},
**ret
}
}
return Response(obj)
例如,对于我的应用程序的urls.py 中的以下路径,这将失败:
path('<str:endpoint>/schema', views.schema, name='schema')
将此添加到根字典中:
api_root_dict['schema'] = 'schema'
(失败是指 NoReverseMatch 异常)
一定会有更好的办法。 Django 模板如何使用 url 键工作?
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.reverse import reverse as api_reverse
class HomeView(APIView):
def get(self, request, format=None):
data = {
"api": {
"search_api": api_reverse("reindex", request=request),
},
}
return Response(data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.