我对Django非常陌生,我在项目中创建了两个应用程序,一个是登录和 server_status 。我已经使用命名空间方法在两个应用程序之间访问我的登录名和server_status。当我尝试访问索引时,它工作正常,但是当我尝试访问dashboard
中的server_status
时,它不起作用。
Reverse for 'server_status' not found. 'server_status' is not a valid view function or pattern name
# server_status URL
from django.urls import path
from . import views
urlpatterns = [
path('', include('server_status.urls', namespace='server_status')),
path('', include('login.urls', namespace='login')),
path('admin/', admin.site.urls),
]
# login app URL
app_name = 'login'
urlpatterns = [
path('login', views.index, name='index')
]
# project URL
from django.contrib import admin
from django.urls import include, path
app_name = 'server_status'
urlpatterns = [
path('', views.index, name='index'),
path('dashboard/', views.dashboard, name='dashboard'),
path('server_status/', views.server_status, name='server_status'),
path('request_access/', views.request_access, name='request_access'),
]
在 server_status / templates / server_status / index.html
<a href="{% url 'server_status:dashboard' %}" class="button primary centered-s">Login</a>
我知道这很简单,但是这让我非常复杂。
答案 0 :(得分:1)
在发布的代码中,您两次定义了urlpatterns
,因此第一组urlpatterns
被第一个覆盖。由于server_status
是在第一组中定义的,因此它不存在于内存中,因为在第二个定义中已将其删除。 index
是唯一可以保留的模式。我认为您要在第二个节中执行的操作是使用以下命令 add 到urlpatterns中:
urlpatterns += [...]
答案 1 :(得分:0)
要声明名称空间,您应该执行以下操作:
# project URL
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('server_status.urls', namespace='server_status')),
path('', include('login.urls', namespace='login')),
path('admin/', admin.site.urls),
]
然后您可以使用
<a href="{% url 'login:index' %}" class="button primary centered-s">Login</a>
或
<a href="{% url 'server_status:index' %}" class="button primary centered-s">Server status index</a>