For example, within myproject.urls:
urlpatterns = ( url(r'', include('.myapp.urls')), )
.. becomes equivalent to::
urlpatterns = ( url(r'', include('myproject.myapp.urls')), )Whilst a contrived example, this can make heavy-nested apps look far, far cleaner. For example, within myproject.foo.foo_bar.foo_bar_baz.urls, one only needs to include .foo_bar_baz_qux.urls to get to the "next" level, rather than the significantly more unwieldy myproject.foo.foo_bar.foo_bar_baz.foo.bar_baz_qux.urls.
--
You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/5a92150c-4969-4432-b47b-0a02ce889312%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
from . import myapp
urlpatterns = (
url(r'^myapp/', include(myapp.urls.urlpatterns)),
)
Going off topic a little bit but.. have we considered deprecating string based includes in favour of actually importing the urls module?
Then users can relatively import their nested app patterns as they will.
Even if we didn't deprecate string based imports I'm wary of increasing their utility.
This just made me realize that the whole problem can already be fixed from the user's perspective by importing the module instead of using string based imports
Not entirely convinced. Firstly it's extra stuff you have to explicitly import which seems a style regression from the "oh just use these included urls" that you get with the string-based import.
Secondly, whilst it might look fine when you are doing it once, for example:
from django.conf.urls import url, include from . import views from .foo import urls urlpatterns = ( url(r'', include(urls, namespace='foo')), url(r'^$', views.landing, name='landing'), )
.. but the import dance get a bit nasty when you have multiple ones - you have to alias each import:
from django.conf.urls import url, include from . import views from .foo_app import urls as foo_urls from .bar_app import urls as bar_urls # etc. urlpatterns = ( url(r'', include(foo_urls, namespace='foo')), url(r'', include(bar_urls, namespace='bar')), url(r'^$', views.landing, name='landing'), )
This isn't an readabiliy improvement over using the string urls IMHO.
Now, if only we could do the following:
from . import views, foo_app, bar_app urlpatterns = ( url(r'', include(foo_app.urls), namespace='foo')), url(r'', include(bar_app.urls), namespace='bar')), url(r'^$', views.landing, name='landing'), )
/lamby