在 Django URL 模式中使用多个空路由可以吗?

问题描述 投票:0回答:1

我的项目应用程序之一的 url.py 包含来自其他应用程序的 url 文件。将它们包含在空路线中是否有我忽略的问题?例如:

appA
urls.py 中:

urlpatterns = [
    path('hub/', views.hub, name='hub'),
    path('dashboard/', views.dashboard, name='dashboard'),
    path('', views.hub_redirect),  # Redirects / to /hub/
    path('', include('appB.urls')),
    path('', include('appC.urls')),
]

其中

appB.urls
appC.urls
都包含具有定义的唯一路线的路径(即,不是
''
)。有用!但现在想知道是否应该...

我没有看到任何文档说需要非空路由,但现在担心最佳实践。我还担心我不了解应用程序的功能。当我使用

django-admin createapp
时,urls.py 不会自动生成,所以这让我想知道是否应该将 url 全部保留在 appA 上并将它们指向 appB 和 appC 的视图,但我当前的方式对我来说很有意义(因为它在相关功能的应用程序内重构 URL 会更容易,而无需在外部(即 appA 中)进行更改。

django django-urls django-apps
1个回答
0
投票

其中

appB.urls
appC.urls
都包含路径,每个路径都有定义的唯一路线。

是的,那很好。 Django 尝试通过枚举从上到下的路径来匹配请求路径,并将触发第一个匹配的路径。

这意味着,如果两个路径重叠,通过使用 include

include(…)
 [Django-doc],或仅两个
.path(…)
 [Django-doc]
,那么它将选择第一个。当然,将它们添加到两个不同的
include(…)
中会让事情变得有点复杂,因为现在路径是在不同的文件中定义的,这使得推理变得更加困难。特别是如果您包含您无法控制的应用程序的路径,最终该包可能会引入新的路径,因此可能会发生重叠。

因此,根据经验,使用非重叠包含通常会更好,但不这样做本身并不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.