我正在尝试在单元测试中使用 reverse()
,但它无法解析 url。
测试.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
测试用例在测试的第一行失败,错误如下:
NoReverseMatch: Reverse for 'customer' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
“尝试了 0 个模式”是否意味着测试甚至无法找到根 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'))
]
最佳答案
在同一个 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。
关于python - 当两个应用程序使用相同的命名空间时,reverse() 引发 NoReverseMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240840/