django urls.exceptions.NoReverseMatch错误,当我想在单元测试中使用反向函数吗?

问题描述 投票:0回答:1

我最近开始使用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-detailtown应用URL定义为命名空间town

[注释DETAIL_TOWN_URL时,我意识到使用CREATE_TOWN_URL的测试将通过,但是当DETAIL_TOWN_URL被定义且未注释时,将发生错误。

那么为什么会发生此错误,我该如何解决?

python django unit-testing namespaces pycharm
1个回答
0
投票

URL中需要镇详细信息的int参数。

尝试使用kwargs

reverse('town-detail',kwargs = {'pk':1})

或参数reverse('town-detail',args = [1]))

有文档链接https://docs.djangoproject.com/en/2.2/ref/urlresolvers/

© www.soinside.com 2019 - 2024. All rights reserved.