react routing and django url conflict
The issue is probably that you haven't configured your URLs to handle the routes that are defined in React Router. In your Django urls.py
you should be using a catch all to match all URLs to your index template
urlpatterns += [ # match the root url(r'^$', base_view), # match all other pages url(r'^(?:.*)/?$', base_view),]
The base_view
would be a view function that renders a template which includes your bundled app.
In case anyone has this same problem, in django 2.0, follow 'Kevin Martin Jose' answer but instead, replace url with re_path
from django.urls import path, re_pathurlpatterns = [ path('login/', LoginView.as_view(), name='login'), path('logout/', LogoutView.as_view()), path('/', login_required(TemplateView.as_view(template_name="app.html"), login_url='login')), re_path(r'^(?:.*)/?$', login_required(TemplateView.as_view(template_name="app.html"), login_url='login')),]
In case someone's wondering, I had the exact problem and Paul S's answer solved it. Adding an answer instead of comment only because SO does not let me format code snippets inside comments. I ended up using a mixture of django's new path()
and the old urls()
in my urls.py
:
urlpatterns = [ path('login/', LoginView.as_view(), name='login'), path('logout/', LogoutView.as_view()), path('/', login_required(TemplateView.as_view(template_name="app.html"), login_url='login')), url(r'^(?:.*)/?$', login_required(TemplateView.as_view(template_name="app.html"), login_url='login')),]
Django handles the login, logout and the root /
. React router handles everything else