首页 > 解决方案 > Django 异常未注册的命名空间

问题描述

我收到以下错误:“文件“C:\Users\odesm\anaconda3\envs\adb3\lib\site-packages\django\urls\base.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(在站点管理器应用程序下)

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')
]

对我来说,似乎我已经注册了正确的命名空间,但似乎我的逻辑在某处有问题。

标签: pythondjangonamespacesdjango-urls

解决方案


由于我的站点管理器应用程序的 urls.py 中包含帐户应用程序的 urls.py,因此我还需要通过站点管理器进行路由。

因此以下

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

推荐阅读