如何使用 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: