【问题标题】:How to set up urls in django when there are multiple apps within the same project?当同一个项目中有多个应用程序时,如何在 django 中设置 url?
【发布时间】:2017-09-11 01:02:15
【问题描述】:

我是 django 的新手。我正在尝试设置 URL。我在“mysite”项目下有 2 个应用程序。在 mysite 的 urls.py 中,我包含了来自 2 个应用程序的 url(称为“登录”和“组织”)

mysite/urls.py

urlpatterns = [
    url(r'^login/', include('login.urls')),
    url(r'^org/', include('org.urls')),
]

登录/urls.py

app_name = 'login'
urlpatterns = [
    url(r'^signup/$', login_views.signup, name='signup'),
]

org/urls.py

app_name = 'org'
urlpatterns = [
    url(r'^organizations/add/$', views.addorg, name='addorg'),
]

以这种方式设置后,我的网站 URL 变为以下:

site.com/login/login/signup
site.com/org/organizations/add

我希望这些 URL 如下所示。

site.com/login/signup
site.com/organizations/add

如何让“包含”工作?如果我将 mysite/urls.py 更改为以下内容,它会起作用吗?

urlpatterns = [
    url(r'^$', include('login.urls')),
    url(r'^$', include('org.urls')),
]

当有多个应用程序时,有没有更好的方法来设置 URL?

谢谢

【问题讨论】:

    标签: python django url


    【解决方案1】:

    mysite/urls.py

    urlpatterns = [
        url(r'^login/', include('login.urls')),
        url(r'^org/', include('org.urls')),
    ]
    

    登录/urls.py

    app_name = 'login'
    urlpatterns = [
        url(r'^signup/$', login_views.signup, name='signup'),
    ]
    

    如果你以这种方式放置你的网址......

    您的注册网址将是 site.com/login/signup 公式是—— [您的网站域 + ma​​in_project/urls.py 中的网址 + any_app/urls.py 中的网址]

    所以要更正您的组织网址 - 您应该将您的 my_site/urls.py 重构为 -

    urlpatterns = [
        url(r'^login/', include('login.urls')),
        url(r'^organizations/', include('org.urls')),
    ]
    

    在你的 orgs/urls.py 中应该是

    app_name = 'org'
    urlpatterns = [
        url(r'^add/$', views.addorg, name='addorg'),
    ]
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      在您描述的设置中,登录网址不是'site.com/login/login/signup',而是'site.com/login/signup'。第二个'login/'来自哪里?

      您建议的解决方案,

      urlpatterns = [
          url(r'^$', include('login.urls')),
          url(r'^$', include('org.urls')),
      ]
      

      如果两个应用程序中没有相同的 url,通常会起作用。但这并不理想,因为登录 urs 中的所有模式都将针对所有请求进行不必要的尝试。

      因此,您可能需要考虑删除 specific_app.urls 内部前缀,尤其是当这些前缀对于应用的所有视图都相同时。将其留给将使用并包含该应用程序(此处为:mysite.urls)的任何人,他们希望在哪个路径下包含该应用程序。

      # login/urls.py
      urlpatterns = [
          # no 'login' prefix here. Includers know which app 
          # they are including and how they want do that.
          url(r'^signup/$', login_views.signup, name='signup'),  
      ]
      
      # org/urls.py
      urlpatterns = [
          # same: no 'org' prefix
          url(r'^add/$', views.addorg, name='addorg'),
      ]
      
      # mysite.urls.py
      urlpatterns = [
          url(r'^login/$', include('login.urls')),
          url(r'^organizations/$', include('org.urls')),
      ]
      

      生成的网址将是:

      site.com/login/signup
      site.com/organizations/add
      

      【讨论】:

      • from django.conf.urls import url from django.urls import include
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多