Django "NoReverseMatch: Reverse for 'ads.views.AdListView' not found" при выполнении Test
Я реализовал несколько тестов для проверки кода состояния некоторых страниц, но этот тест с обратной функцией выдает ошибку: django.urls.exceptions.NoReverseMatch: Reverse for 'ads.views.AdListView' not found. 'ads.views.AdListView' не является допустимой функцией представления или именем шаблона.
Читая документацию и некоторые ответы на stackoverflow, я должен использовать либо имя функции представления, либо имя шаблона внутри скобки обратной функции, но ни один из них, похоже, не работает.
Вот мой код:
ads/tests/test_urls.py
from django.test import TestCase
from django.urls import reverse
class SimpleTests(TestCase):
def test_detail_view_url_by_name(self):
resp = self.client.get(reverse('ad_detail'))
# I've also tried: resp = self.client.get(reverse('ads/ad_detail'))
self.assertEqual(resp.status_code, 200)
...
ads\urls.py
from django.urls import path, reverse_lazy
from . import views
app_name='ads'
urlpatterns = [
path('', views.AdListView.as_view(), name='all'),
path('ad/<int:pk>', views.AdDetailView.as_view(), name='ad_detail'),
...
]
mysite/urls.py
from django.urls import path, include
urlpatterns = [
path('', include('home.urls')), # Change to ads.urls
path('ads/', include('ads.urls')),
...
]
ads/views.py
class AdDetailView(OwnerDetailView):
model = Ad
template_name = 'ads/ad_detail.html'
def get(self, request, pk) :
retrieved_ad = Ad.objects.get(id=pk)
comments = Comment.objects.filter(ad=retrieved_ad).order_by('-updated_at')
comment_form = CommentForm()
context = { 'ad' : retrieved_ad, 'comments': comments, 'comment_form': comment_form }
return render(request, self.template_name, context)
Я новичок в Django, поэтому я не очень понимаю, что происходит. Есть идеи о том, что вызывает проблему? Заранее спасибо
Поскольку вы используете app_name=…
в вашем urls.py
, вам нужно указать это как пространство имен в имени представления, поэтому ads:ad_detail
, и указать первичный ключ:
resp = self.client.get(reverse('ads:ad_detail', kwargs={'pk': 42}))
Здесь мы посещаем URL, где 42
используется как значение для параметра URL pk
.