reverse()在两个应用程序使用相同名称p时引发NoReverseMatch

2024-03-29 04:49:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在单元测试中使用reverse(),但它无法解析url。在

tests.py

from django.core.urlresolvers import reverse
from rest_framework import status
from rest_framework.test import APITestCase

class MyTest(APITestCase):
    def test_cust_lookup(self):
        url = reverse('v1:customer')
        # Other code

测试用例在测试的第一行失败,错误如下:

^{pr2}$

“0 patterns trusted”是否意味着测试甚至无法找到根urls.py?是不是我搞错了?在

proj/settings.py

ROOT_URLCONF = 'proj.urls'

proj/myapp/urls.py

from django.conf.urls import url
import views

urlpatterns = [
    url(r'cust/$', views.CustomerView.as_view(), name='customer')
]

proj/urls.py

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^api1/v1/', include('myapp1.urls', namespace='v1')),
    url(r'^api2/v1/', include('myapp2.urls', namespace='v1'))
]

Tags: djangofrompytestimportresturlinclude
2条回答

不要在同一个url名称空间下使用不同的应用程序,Django无法处理它,也不会告诉你这就是问题所在。将命名空间更改为每个应用程序的唯一名称空间。在

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^api1/v1/', include('myapp1.urls', namespace='app1-v1')),
    url(r'^api2/v1/', include('myapp2.urls', namespace='app2-v1'))
]

使用reverse('app1-v1:customer')反转url。在

你的设置应该是

ROOT_URLCONF = 'urls'

不是

^{pr2}$

相关问题 更多 >