django urls.exceptions.NoReverseMatch происходит, когда я хочу использовать функцию реверса в юнит-тестах? - PullRequest
0 голосов
/ 06 ноября 2019

Я недавно начал разработку приложения с 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

этоfile 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'))

]

API работает очень хорошо, когда я использую эту ссылку для проверки: localhost:8000/api/town но когда я пытаюсь запустить модульные тесты в 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, я определил town-detail, а также town URL-адреса приложений в основных URL-адресах проекта как пространство имен town.

Когда я комментирую DETAIL_TOWN_URL, я понимаю, что тесты с CREATE_TOWN_URL пройдут, но когда DETAIL_TOWN_URL определен и не прокомментирован, возникает ошибка.

Итак, почему происходит эта ошибка и как я могу ее исправить?

1 Ответ

1 голос
/ 06 ноября 2019

Информация о городе требуется аргумент int в URL.

Попробуйте использовать kwargs

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

Или args reverse ('town-detail',args = [1]))

Есть ссылка на документацию https://docs.djangoproject.com/en/2.2/ref/urlresolvers/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...