[Django]-Django URLS, how to map root to app?

72πŸ‘

βœ…

This sounds strange.

Your latest attempt should work, but what I normally do – put

urlpatterns = patterns('',
    (r'^$', lambda r: HttpResponseRedirect('myapp/')),
    ...
)

This scales better when you start adding new apps.

πŸ‘€Guard

105πŸ‘

I know that this question was asked 2 years ago, but I’ve faced the same problem and found a solution:

In the project urls.py:

urlpatterns = patterns('',
    url(r'^', include('my_app.urls')), #NOTE: without $
)

In my_app.urls.py:

urlpatterns = patterns('',
    url(r'^$', 'my_app.views.home', name='home'),
    url(r'^v1/$', 'my_app.views.v1', name='name_1'),
    url(r'^v2/$', 'my_app.views.v2', name='name_2'),
    url(r'^v3/$', 'my_app.views.v3', name='name_3'),
)
πŸ‘€Kamal Alseisy

30πŸ‘

As I didn’t see any answer for django 2.0 I thought I’ll provide one. you have to use '' as the root url. Here is an example from django 2.0 docs

urlpatterns = [
    path('', main_views.homepage),
    path('help/', include('apps.help.urls')),
    path('credit/', include(extra_patterns)),
]
πŸ‘€Amen

6πŸ‘

old question here … (as much as myself :o)
but still worth of sharing updates for Django 3.x:

In project urls.py just add:

urlpatterns = [
    path('', include('myapp.urls')), 
    path('myapp/', include('myapp.urls')),
    #path('admin/', admin.site.urls),
]

Be aware that this solution will monopolize the whole django to your hungry&selfish app πŸ™‚ !!!

πŸ‘€Marcon

5πŸ‘

Just put an empty raw regular expression: r”

I tested here and it worked perfectly.

urlpatterns = patterns('',
    url(r'', include('homepage.urls')),
    url(r'^homepage/', include('homepage.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

Hope it help!

πŸ‘€Fabio Nolasco

5πŸ‘

I also wanted to have the root of my domain to directly point to a view of a sub app.

At first I created the sub app with this command:

python3 manage.py startapp main offer_finder/main

In your case it would be:

python3 manage.py startapp myApp project/somedirectory/myApp

make sure that the directory exists: mkdir -p project/somedirectory/myApp

This is my project structure: Project structure

In my case I have these directories:

offer_finder_project/offer_finder/main        # sub app  
offer_finder_project/offer_finder/            # main source directory  

in offer_finder_project/offer_finder/urls.py I have this code:

from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('offer_finder.main.urls')),
]

And in offer_finder_project/offer_finder/main/urls.py I have this code:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
]

And the offer_finder_project/offer_finder/main/views.py file simply contains some test code.

from django.http import HttpResponse

def index(request):
    return HttpResponse("TEST app index")

This way your requests to your root domain are directed to your sub app.
Hopefully this helps someone.
This code was tested with Django 2.1.4.

πŸ‘€John Behm

2πŸ‘

I know the answer is late, but i had my fair share of hunting recently. This is what i tried with CBV..
in Project urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', include('app_name.urls', namespace='app_name')),
]

PS: It is always recommended to use namespace. Gives a good advantage later on.

In App urls.py

urlpatterns = [
    url(r'^$', views.IndexPageView.as_view(), name='index'),
]
πŸ‘€Vipin Mohan

Leave a comment