Протестируйте несколько HTML-шаблонов, чтобы убедиться, что они возвращают 200

У меня есть сотни HTML-шаблонов, которые я должен протестировать, и я не знаю, как проверить каждый в отдельности, чтобы убедиться, что они загружаются правильно. Я предполагаю использовать цикл for через мой проект urls.py, но когда я делаю это, я получаю следующую ошибку:

AttributeError: объект 'URLResolver' не имеет атрибута 'name'

from django.test import SimpleTestCase, TestCase, Client
from django.test.utils import setup_test_environment
from django.urls import reverse, URLPattern
from django.conf import settings
import importlib
from foo.urls import urlpatterns

# Create your tests here.
class LoginTest(SimpleTestCase):
    def login_view_test(self):
        client = Client()
        for url in urlpatterns:
            response = client.get(reverse(url.name))
            self.assertEqual(response.status_code, 200)
            print(str(reverse(url.name)) + " Status Code:" + str(response.status_code))

По какой-то причине код говорит, что URLResolver не имеет атрибута name, я чувствую, что эта ошибка говорит мне, что я должен искать в другом месте, чтобы изменить имя, я просто не знаю, где искать.

При удалении .name в обратном теге, я получил эту ошибку:

<URLResolver <module 'account.urls' from '/home/company/company_project/account/urls.py'> (None:None) 'account/'>

Вы не обязаны давать urlpattern имя.

Например:

...
path('someurl/', generic.RedirectView.as_view(url='/anyurl/')),
...

приводит к URLPattern без имени

<URLPattern 'someurl/'>  # no name

В вашем случае вы, вероятно, можете напрямую использовать сохраненный маршрут:

from django.test import SimpleTestCase, TestCase, Client
from django.test.utils import setup_test_environment
from django.urls import reverse, URLPattern
from django.conf import settings
import importlib
from foo.urls import urlpatterns

# Create your tests here.
class LoginTest(SimpleTestCase):
    def login_view_test(self):
        client = Client()
        for urlpattern in urlpatterns:
            if urlpattern.name is None:
                continue
            response = client.get(urlpattern.pattern._route))
            self.assertEqual(response.status_code, 200)
            print(str(reverse(url.name)) + " Status Code:" + str(response.status_code))

Обратите внимание, что это не работает, если вы передали некоторые параметры, например, первичные ключи.

Возможно, это еще не лучшее решение, так как мы используем внутренний атрибут, но оно решает вашу проблему :-)

Вернуться на верх