当同一个项目中有多个应用程序时,如何在django中设置URL?

时间:2017-04-14 18:25:38

标签: python django url

我是django的新手。我正在尝试设置网址。我在一个项目下有2个应用程序' mysite'。在mysls的urls.py中,我已经包含了2个应用中的网址(称为'登录'以及' org')

的mysite / urls.py

console.log

登录/ 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'),
]

通过这种方式设置,我的网站网址变为以下内容:

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

我想要这些网址,以便它们如下所示。

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

如何获得'包含'上班?如果我将mysite / urls.py更改为以下内容,它会起作用吗?

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

当有多个应用时,是否有更好的方法来设置网址?

由于

2 个答案:

答案 0 :(得分:2)

<强> 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 公式是 - [您的网站域 + url in main_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'),
]

我希望它有所帮助。

答案 1 :(得分:0)

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

您建议的解决方案

urlpatterns = [
    url(r'^$', include('login.urls')),
    url(r'^$', include('org.urls')),
]
如果两个应用中没有相同的网址,

通常会有用。但这并不理想,因为所有请求都会不必要地尝试登录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