Django:无法解析 URL 模式:始终显示索引页面内容

Django : Cannot resolve the URLs pattern : Always Index page content is displayed

我正在学习 Django。我构建了一个应用程序,我在其中设置了 URL 模式,但在所有情况下它都显示索引页面的数据。

appTwo urls.py 文件:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^$', views.users, name='users'),
    url(r'^$', views.help, name='help'),
]

我的项目urls.py 文件:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url('admin/', admin.site.urls),
    url(r'^users/', include('appTwo.urls')),
    url(r'^help/', include('appTwo.urls')),
]

如果我调用/users 或/help,浏览器只显示索引文件的数据。

有没有我做错的正则表达式?

当 django 到达此处(在您的应用程序 url 中)并解析 urls 时,看到所有三个 urls 都有空的正则表达式作为第一个参数(因此第一个将被选中),当你看到它的索引时,你总是显示索引页面。您需要区分 urls。像这样。

urlpatterns = [
                      url(r'^users/$', views.users, name='users'),
                      url(r'^help/$', views.help, name='help'),
                      url(r'^$', views.index, name='index'),
                   ]

我认为您也不能在其他 url 顶部使用空正则表达式编写 url 索引,否则它将始终被选中。

urlpatterns 的设置有误。首先,在您项目的 urls.py 文件中,您说如果请求发送到 /users/help,那么 Django 应该查看您的 appTwo.urls。当 Django 到达那里时,它发现 urlpatters 已设置,因此任何上述 url 之后为空的所有内容都必须由 views.indexviews.usersviews.help 处理。但是由于 views.index 是列表中的第一个,因此所有请求最终都由该视图处理。

顺便说一句,如果您使用的是 Django >= 2.0,则不再需要使用 url() 函数,而是使用 path() 函数,您可以将路径声明为简单的字符串而不是正则表达式。

你应该有如下内容:

MyProject/urls.py

from django.urls import path


urlpatterns = [
    path('', include('appTwo.urls')),
    path('admin/', admin.site.urls)
]

MyApp/urls.py

from django.urls import path

urlpatterns = [
    path('', views.index, name='index'),
    path('users/', views.users, name='users'),
    path('help/', views.help, name='help'),
]