我正在尝试给django一个url并将其解析为一个视图。例如:
>>> reverse('login')
'/login/'
>>> reverse('/login/')
回溯(最近通话最近): 文件“”,第1行,位于 文件“ /Users/david/Desktop/V/lib/python3.6/site-packages/django/urls/base.py”,第90行,反过来 返回iri_to_uri(resolver._reverse_with_prefix(视图,前缀,* args,** kwargs)) _reverse_with_prefix中的文件“ /Users/david/Desktop/V/lib/python3.6/site-packages/django/urls/resolvers.py”,第622行 提高NoReverseMatch(msg)
还有另一种方法吗?还是我可以为其传递URL的django方法(这些将是“肮脏的” URL,例如“ https://example.com/login/?next=/myaccount/”),并将其解析为正确的视图?
答案 0 :(得分:3)
在redirect
模块中,django.urls
的相反是resolve
[Django-doc]:
resolve()
函数可用于解析指向 相应的视图功能。它具有以下签名:
resolve(path, urlconf=None)
path
是您要解析的URL路径。与reverse()
一样,您 无需担心urlconf
参数。功能 返回ResolverMatch
对象,该对象允许您访问各种 有关解析的URL的元数据。
例如:
>>> from django.urls import resolve
>>> resolve('/admin/')
ResolverMatch(func=django.contrib.admin.sites.index, args=(), kwargs={}, url_name=index, app_names=['admin'], namespaces=['admin'])
因此,它返回一个ResolverMatch
,其中包含将与位置和命名参数一起调用的“ view”函数,以及有关名称空间,应用程序名称等的信息。
对于无法解析的URL,将引发django.urls.exceptions.Resolver404
错误。
请注意,查询字符串不是path
的一部分。您可以使用以下方法提取路径:
>>> from urllib.parse import urlparse
>>> urlparse('/login/?next=a')
ParseResult(scheme='', netloc='', path='/login/', params='', query='next=a', fragment='')
因此只有path='...'
部分(可以通过获取.path
属性来获取)将确定视图函数,查询字符串作为带有{{1}的类似字典的对象传递给视图}。