如何使用 django.core.urlresolvers.reverse 获得 url 的视图
How to get url of view using django.core.urlresolvers.reverse
我在这样的 Django 项目中 urls.py 中有 URL 模式。
urlpatterns = [
url(r'^web/', include('project.web.weburls')),
]
在我的网络urls.py文件中我有这个:
urlpatterns = [
url(r'^$', webview.home)
]
在 webview 文件中,我有这个:
def home(request):
pass
在我的测试文件中,我写了如下的测试用例,
url = reverse("project.web.weburls.webview.home")
但它给了我一个错误。
NoReverseMatch:找不到 'project.web.weburls.webview.home' 的反向。
为什么我会得到这个?我使用这种方法有什么错误吗?
提前致谢。
首先您需要为您的 url 路线命名。
path('archive/', views.archive, name='news-archive')
从django.urls导入反向
然后您可以使用 reverse() 函数来获得 url 反转。
请参阅下面 link 中的 django 文档:
https://docs.djangoproject.com/en/2.1/ref/urlresolvers/
并查看在单元测试中使用反向的 django 测试。
https://django-testing-docs.readthedocs.io/en/latest/views.html#getting-into-context
您反转了 Django 项目的 URL 命名空间,而不是 python 代码。为此,您必须调用 reverse('home')
或 reverse(home)
。与 docs 比较:
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
viewname can be a URL pattern name or the callable view object. For example, given the following url:
我在这样的 Django 项目中 urls.py 中有 URL 模式。
urlpatterns = [
url(r'^web/', include('project.web.weburls')),
]
在我的网络urls.py文件中我有这个:
urlpatterns = [
url(r'^$', webview.home)
]
在 webview 文件中,我有这个:
def home(request):
pass
在我的测试文件中,我写了如下的测试用例,
url = reverse("project.web.weburls.webview.home")
但它给了我一个错误。 NoReverseMatch:找不到 'project.web.weburls.webview.home' 的反向。
为什么我会得到这个?我使用这种方法有什么错误吗?
提前致谢。
首先您需要为您的 url 路线命名。
path('archive/', views.archive, name='news-archive')
从django.urls导入反向
然后您可以使用 reverse() 函数来获得 url 反转。 请参阅下面 link 中的 django 文档:
https://docs.djangoproject.com/en/2.1/ref/urlresolvers/
并查看在单元测试中使用反向的 django 测试。
https://django-testing-docs.readthedocs.io/en/latest/views.html#getting-into-context
您反转了 Django 项目的 URL 命名空间,而不是 python 代码。为此,您必须调用 reverse('home')
或 reverse(home)
。与 docs 比较:
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None) viewname can be a URL pattern name or the callable view object. For example, given the following url: