#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>