【问题标题】:Django: How do I handle urls with multiple appsDjango:如何处理多个应用程序的网址
【发布时间】:2021-02-13 13:04:30
【问题描述】:

我有两个应用程序:coredm 这是我的代码:

核心/urls.py

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

dm/urls.py

urlpatterns = [
    path('', views.dm, name='dm'),
    path('prices', views.dm_prices, name='prices')
]

mysite/urls.py

from core import views
from dm import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('core.urls')),
    path("stripe/", include("djstripe.urls", namespace="djstripe")),
    path('dm', include('dm.urls')),
    path('dm/prices', include('dm.urls')),
]

所以,从404页面看,我可以看到他看到的网址是:

  1. 管理员/
  2. [name='index']
  3. 条纹/
  4. dm [name='dm']
  5. dm 价格 [name='prices']
  6. dm/价格 [name='dm']
  7. dm/prices 价格 [name='prices']

如果有人可以向我解释 django 如何读取不同的 URL 以及如何对它们进行排序,我会非常高兴。 非常感谢!

【问题讨论】:

标签: python django


【解决方案1】:

首先,您不需要将同一应用的网址包含两次,include('<my_app>.urls') 将包含您在应用的urlpatterns 中提及的所有网址。所以'dm/prices' 在你的情况下是多余的,把它改成这个就可以了。

from core import views
from dm import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('core.urls')),
    path('dm/', include('dm.urls')),
    path("stripe/", include("djstripe.urls", namespace="djstripe")),
]

有关include()的更多信息,请阅读django docs

【讨论】:

  • 是的,它奏效了。所以在 mysite/urls.py 我只需要包含一个应用程序一次,我给它的路由会转到应用程序所有 URL 的开头,对吧?
【解决方案2】:

这可能有点超出您的问题范围,但是 404 页面是您想要解决的问题吗?

正如 Rustam Garayev 所说的 path('dm', include('dm.urls')),django 包含该文件中的所有 url(同样适用于 'core' 路径中的那些)。这就是它们出现两次的原因。您基本上创建了四个路径:

  • <yoursite>/dm/(命名空间dm
  • <yoursite>/dm/prices(命名空间prices
  • <yoursite>/dm/prices(命名空间dm
  • <yoursite>/dm/prices/prices(命名空间prices

顺序与导入应用程序网址的文件中的顺序相同,即。 e. 1 和 2 是第一个 include 语句的结果,3 和 4 是第二个语句的结果。

顺便说一句,我意识到您正在导入两个 views 函数(core.viewsdm.views)并建议定义一个别名以避免名称冲突,以防您在他们。

from core import views as cviews
from dm import views as dviews

【讨论】:

  • 感谢您的回复。不,404 页面只是为了让我可以看到 Django 生成/看到的 URL 列表。顺便说一句,谢谢你的别名推荐,我会照你说的做的。
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 2013-03-30
  • 2012-07-05
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多