urls.py 中的 Django Include() 有两个应用程序

Django Include() in urls.py with two apps

我认为这是一个简单的问题,但我很难弄清楚为什么这不起作用。

我有一个 django 项目,我添加了第二个应用程序(销售)。在第二个应用程序之前,我的 urls.py 只是将所有内容路由到第一个应用程序(图表),内容如下:

urlpatterns = [

    path('admin/', admin.site.urls),
    path('', include('chart.urls')),
]

而且效果很好。

我已经一遍又一遍地阅读文档并查看了许多教程,所以我的印象是我可以简单地修改 urls.py 以包括:

urlpatterns = [

    path('admin/', admin.site.urls),
    path('sales/', include('sales.urls')),
    path('', include('chart.urls')),
]

,它应该首先寻找带有 sales/ 的 url,如果找到,则应该将其路由到 sales.urls,如果找不到,则继续路由它到 chart.urls。但是,当我加载它并输入 127.0.0.1:8000/sales 时,它 returns 出现以下错误:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/sales/
Raised by:  chart.views.index

这告诉我它没有将我的销售/ url 路由到 sales.urls,而是路由到 chart.urls。当我将 path('', include('chart.urls')) 更改为 path('', include('sales.urls')) 时,它会将它路由到 sales.urls,因此我知道我的 sales.urls 文件设置正确。

我知道这可能是一个简单的问题,但我无法用我读过的任何东西来解决这个问题。感谢任何帮助。

chart.urls:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('dashboard/', views.chart, name='dashboard'),
    path('', views.index, name='index', kwargs={'pagename': ''}),
    path('<str:pagename>/', views.index, name='index'),
]

sales.urls:

from django.urls import path
from . import views

urlpatterns = [
    path('sales/', views.sales, name='Sales Dashboard'),
]

这样做:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('chart.urls')),
    url(r'^sales/', include('sales.urls')),
]

你做的不对,因为你没有告诉你的应用程序加载后去哪里。这个 r'^' 直接转到 chart.url url(r'^', include('chart.urls')),

from django.urls import path, include

别忘了导入 include

我认为您的销售页面的正确 url 应该是 http://127.0.0.1:8000/sales/sales/

这是因为 sales/ 随后正在查找包含的 sales.urls 并且没有在根 / 中找到任何 url(唯一的 url包含在 sales/(在 sales/ 内)所以将是 sales/sales/

回复一个旧问题,但可能对其他人有用...