Django URLS, how to map root to app?
Solution 1:
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'),
)
Solution 2:
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.
Solution 3:
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)),
]
Solution 4:
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!
Solution 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.