Django URLS, how to map root to app?

*爱你&永不变心* 提交于 2019-12-02 14:50:47

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.

Kamal Alseisy

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'),
)

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)),
]

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!

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'),
]

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!