[Fixed]-Django redirect to root from a view

15👍

I am using Django 3.1. This is what I do to achieve this:

in urls.py

from django.shortcuts import redirect

urlpatterns = [
    path('', lambda req: redirect('/myapp/')),
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls'))
]

5👍

If you look at the documentation for redirect, there are several things you can pass to the function:

  • A model
  • A view name
  • A URL

In general, I think it’s better to redirect to a view name rather than a URL. In your case, assuming your urls.py has an entry that looks something like:

url(r'^$', 'Home.views.index'),

I would instead use redirect like this:

redirect('Home.views.index')

1👍

Also complementing Ken Cloud answer, if you have named urls you can just call the url name:

from django.shortcuts import redirect

urlpatterns = [
    path('app/', include('myapp.urls'), name='app')
    path('', lambda req: redirect('app')),
    path('admin/', admin.site.urls),
]

Leave a comment