我最近开始使用django开发应用程序,this是整个项目的链接。
这是项目结构:
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.urls.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')
]
以及config/settings/urls.py
的文件:
from django.contrib import admin
from django.urls import path, include
# from .views import views
urlpatterns = [
path('admin/', admin.site.urls),
# path('', views.index)
path('api/', include('project.api.city.urls', namespace='city')),
path('api/', include('project.api.town.urls', namespace='town'))
]
当我使用此链接检出:localhost:8000/api/town
时,API正常工作,但是当我尝试在pycharm中运行单元测试时,不幸的是发生了一些错误。这是测试模块的某些部分,错误发生在DETAIL_TOWN_URL = reverse('town:town-detail'):
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.
显然是反向找不到该术语town-detail
,但是正如您在project/api/town.urls.py
中所看到的,我已经在项目主URL中将town-detail
和town
应用URL定义为命名空间town
。
[注释DETAIL_TOWN_URL
时,我意识到使用CREATE_TOWN_URL
的测试将通过,但是当DETAIL_TOWN_URL
被定义且未注释时,将发生错误。
那么为什么会发生此错误,我该如何解决?
URL中需要镇详细信息的int参数。
尝试使用kwargs
reverse('town-detail',kwargs = {'pk':1})
或参数reverse('town-detail',args = [1]))
有文档链接https://docs.djangoproject.com/en/2.2/ref/urlresolvers/