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

2024-05-14 20:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的。我正在尝试设置网址。我在“我的网站”项目下有两个应用程序。在mysite的url.py中,我包含了来自两个应用程序(称为“login”和“org”)的url

mysite/url.py

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

登录/url.py

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

org/url.py

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

以这种方式设置后,“我的网站URL”将变成以下内容:

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

我想要的网址,使他们像下面。

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

如何让“includes”工作?如果我将mysite/url.py更改为以下文件,它是否可以工作?

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

当有多个应用程序时,是否有更好的方法来设置url?

谢谢


Tags: namepyorgcomadd应用程序urlinclude
2条回答

mysite/url.py

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

登录/url.py

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

如果你用这种方式把你的网址。。。

您的注册url将是site.com/login/signup 公式是- [您的站点域+main_project/url.py中的url+任何_app/url.py中的url]

所以要更正您的组织url- 你应该重构你的我的网站/url.py为-

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

在您的orgs/url.py

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

我希望有帮助。

在您描述的设置中,登录url不是'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.url)。

# 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')),
]

生成的URL将是:

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

相关问题 更多 >

    热门问题