Soy nuevo en Django. Estoy tratando de configurar las URL. Tengo 2 aplicaciones bajo un proyecto 'mysite'. En el urls.py de mysite, he incluido las URL de las 2 aplicaciones (llamadas 'login' y 'org')
misitio/urls.py
urlpatterns = [ url(r'^login/', include('login.urls')), url(r'^org/', include('org.urls')), ]login/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'), ]Habiéndolo configurado de esta manera, las URL de mi sitio se convierten en las siguientes:
site.com/login/login/signup site.com/org/organizations/addQuisiera las URLs para que sean como las siguientes.
site.com/login/signup site.com/organizations/add¿Cómo hago para que funcionen los 'incluye'? ¿Funcionará si cambio mysite/urls.py a lo siguiente?
urlpatterns = [ url(r'^$', include('login.urls')), url(r'^$', include('org.urls')), ]¿Hay una mejor manera de configurar las URL cuando hay varias aplicaciones?
Gracias
En la configuración que describe, la URL de inicio de sesión no sería 'site.com/login/login/signup' , sino 'site.com/login/signup' . ¿De dónde vendría el segundo 'login/' ?
La solución que sugieres,
urlpatterns = [ url(r'^$', include('login.urls')), url(r'^$', include('org.urls')), ]generalmente funcionará si no hay una URL que ocurra de manera idéntica en ambas aplicaciones. Pero no es ideal, ya que todos los patrones en el urs de inicio de sesión se probarán innecesariamente para todas las solicitudes.
Por lo tanto, es posible que desee considerar eliminar los prefijos internos de specific_app.urls , especialmente si esos prefijos son los mismos para todas las vistas de la aplicación. Déjelo a quien quiera que use e incluya esa aplicación (aquí: mysite.urls) en qué ruta quieren incluir la aplicación.
# 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')), ]Las URL resultantes serán:
site.com/login/signup site.com/organizations/addmisitio/urls.py
urlpatterns = [ url(r'^login/', include('login.urls')), url(r'^org/', include('org.urls')), ]login/urls.py
app_name = 'login' urlpatterns = [ url(r'^signup/$', login_views.signup, name='signup'), ]Si pones tus urls de esta manera...
Su url de registro será site.com/login/signup La fórmula es: [ el dominio de su sitio + urls en main_project/urls.py + urls en any_app/urls.py ]
Entonces, para corregir la URL de su organización, debe refactorizar su my_site/urls.py como:
urlpatterns = [ url(r'^login/', include('login.urls')), url(r'^organizations/', include('org.urls')), ]y en su orgs/urls.py debe ser
app_name = 'org' urlpatterns = [ url(r'^add/$', views.addorg, name='addorg'), ]Espero que ayude.