Python django URL.exceptions.NoReverseMatch当我想在unittests中使用反向函数时发生错误?
我最近开始用django开发一个应用程序,它是整个项目的链接 这是项目结构:Python django URL.exceptions.NoReverseMatch当我想在unittests中使用反向函数时发生错误?,python,django,unit-testing,namespaces,pycharm,Python,Django,Unit Testing,Namespaces,Pycharm,我最近开始用django开发一个应用程序,它是整个项目的链接 这是项目结构: config/ env/ .env files requirements/ __init__.py ... settings/ __init__.py base.py local.py __init__.py urls.py views.py wsgi.py proje
config/
env/
.env files
requirements/
__init__.py
...
settings/
__init__.py
base.py
local.py
__init__.py
urls.py
views.py
wsgi.py
projects/
api/
town/
apps.py
urls.py
views.py
...
core/
models/
town.py
serializers/
town_serializer.py
...
tests/
test_town.py
manage.py
这是文件project/api/town.url.py
:
from django.urls import path
from . import views
app_name = 'town'
urlpatterns = [
path('town/', views.CreateTownView.as_view(), name='town-list'),
path('town/<int:pk>/', views.TownViewSet.as_view(), name='town-detail')
]
]
当我使用此链接签出时,API工作正常:localhost:8000/API/town
,但当我尝试在pycharm中运行单元测试时,不幸的是出现了一些错误。这是测试模块的某个部分,错误发生在详细信息\u TOWN\u URL=reverse('TOWN:TOWN DETAIL'):
这就是错误:
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'town-detail' with no arguments not found.
显然,reverse找不到术语town detail
,但正如您在project/api/town.url.py
中所看到的,我在项目主URL中将town detail
和town
应用程序URL定义为命名空间town
当我对DETAIL\u-TOWN\u-URL
进行注释时,我意识到使用CREATE\u-TOWN\u-URL
进行的测试将通过,但当定义了DETAIL\u-TOWN\u-URL
且未对其进行注释时,就会发生错误
那么,为什么会发生此错误以及如何修复它呢?url中的Town detail required int参数 试着用kwargs 反面('town-detail',kwargs={'pk':1}) 或args 反面('town-detail',args=[1])) 有到文档的链接
城镇详细信息需要url中的int参数 试着用kwargs 反面('town-detail',kwargs={'pk':1}) 或args 反面('town-detail',args=[1])) 有到文档的链接
看一看反面\u lazy:看一看反面\u lazy:我刚发现,回来要回答,但我看到了你的回答。无论如何,非常感谢你花了这么多时间在上面。我刚刚发现了,回来给你一个答案,但我看到了你的回复。无论如何,非常感谢你花了这么多时间
from django.db import IntegrityError
from django.test import TestCase
from project.core.models.town import Town
from django.urls import reverse
from rest_framework.test import APIClient
from rest_framework import status
import unittest
CREATE_TOWN_URL = reverse('town:town-list')
DETAIL_TOWN_URL = reverse('town:town-detail')
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'town-detail' with no arguments not found.