Until today, I didn't realise that Django lazily evaluates it's URLs. I discovered this when the code me and my team were working on had a cascading URL include. So we had something like:
# main urls.py urlpattern = [ url(r'^path/', include('app1.urls'), ] # 2nd url - app1's url.py urlpattern = [ url(r'^app1/', include('app1.subapp.urls'), ] # 3rd url - subapp for app1 urls.py urlpattern = [ url(r'^subapp/$, actual_view.as_view()), ]
Problem started when I assumed that the full URL path will show in the debug page on the browser. I was looking for /path/app1/subapp/. I only saw the /path listing.
This is where I thought that Django was not registering the rest. It never dawned on me that by just doing "localhost:8000/path/" will allow me to see the rest of the URL pathing. Django just shows the same or next urls not the urls 2 levels in.
Thank you Eric (@riclags) for pointing out that fact.
I'm a dumbass sometimes.