python - 当两个应用程序使用相同的命名空间时,reverse() 引发 NoReverseMatch

标签 python django

我正在尝试在单元测试中使用 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/

相关文章:

python - 如何修复在 Python 中使用 Odata 进行 Azure 存储帐户数据查询时出现 'AuthenticationFailed' 错误?

python - 将 Python 方法动态绑定(bind)到实例会正确绑定(bind)方法名称,但不会绑定(bind)方法

python - 减少 pandas DataFrame 中的列数

django - 在 Django 中更改 request.user

python - Django + Postgres : save JSON string directly into model as JSON type

Django ChoiceField 获取当前选中状态

python - 通过旋转数据框中的数据将具有相同名称的列重新排列为一列

python - 使用 Python 在 RPI3 中串行丢失数据

mysql - django model orm,一个关系查询问题,很难描述

django - Django 2.0 url()到path()