Незарегистрированное пространство имен исключений Django

#python #django #namespaces #django-urls

#python #django #пространства имен #django-urls

Вопрос:

Я получаю следующую ошибку: «Файл»C:Usersodesmanaconda3envsadb3libsite-packagesdjangourlsbase.py «, строка 83, в обратном порядке вызывает NoReverseMatch(«%s не является зарегистрированным пространством имен» % key) django.urls.exceptions.NoReverseMatch: ‘accounts’ не является зарегистрированным пространством имен»

Я рассмотрел похожие ошибки при переполнении стека и попытался их решить, но ни один из них не кажется применимым. Я не понимаю, каким образом мне не удалось зарегистрировать пространство имен, когда оно было указано в пути (include(namespace=»»)), и я включил app_name=»app_name» в соответствующий url.py досье.

base.html (фрагмент кода, выдающий ошибку)

 <li class="nav-item">
  <a class="nav-link" href="{% url 'accounts:login' %}">Login</a>
</li>
 

urls.py (в приложении sitemanger)

 app_name = 'sitemanager'

urlpatterns = [
    path('', views.HomeView.as_view(), name='site-home'),
    path('accounts/', include('accounts.urls', namespace='accounts')),
    path('accounts/', include('django.contrib.auth.urls')),
]
 

urls.py (для приложения «Учетные записи»)

 app_name = 'accounts'

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
    path('signup/', views.SignUpView.as_view(template_name='accounts/signup.html'), name='signup'),
    path('edit/', views.UpdateProfileView.as_view(template_name='accounts/update_profile.html'), name='edit'),
    path('<slug:username>/', views.ProfileView.as_view(template_name='accounts/profile.html'), name='profile')
]
 

Мне кажется, что я зарегистрировал правильное пространство имен, но, похоже, моя логика где-то ошибочна.

Ответ №1:

Поскольку у меня есть urls.py для приложения «Учетные записи», включенного в urls.py для моего приложения sitemanager мне также нужно было проложить маршрут через sitemanager.

Следовательно, следующее

 <li class="nav-item">
  <a class="nav-link" href="{% url 'accounts:login' %}">Login</a>
</li>
 

Необходимо стать

 <li class="nav-item">
  <a class="nav-link" href="{% url 'sitemanager:accounts:login' %}">Login</a>
</li>