如何在Django项目上的React-Router中使用句柄404错误

时间:2018-12-18 03:07:10

标签: django reactjs django-rest-framework react-router

我目前正在构建一个django反应的Web应用程序,我想知道如何在react-router而不是django端处理我的404错误,这是我的代码,其中404错误将在django服务器端进行路由...

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^api/', include(urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
                      document_root=settings.MEDIA_ROOT)


routes = getattr(settings, 'REACT_ROUTES', [])
# urlpatterns += [url(r'^', 
TemplateView.as_view(template_name='index.html'))]
urlpatterns += [url(r'^(%s)?$' % '|'.join(routes),TemplateView.as_view(template_name='index.html'))]

2 个答案:

答案 0 :(得分:1)

这就是我要做的:

首先使用正则表达式模式定义来自django的网址,该网址可以接受任何内容:

url(r'^.*$', TemplateView.as_view(), name="home")  # This is the view which servers the react application

并将此路径添加到urlpatterns的底部。

第二,在React App中添加新路由器:

<Route component={NotFoundComponent} />  // This component is for showing 404 page.

对于其余路由器,应具有exact

您可以在this tutorial中了解如何在React中实现404页面。

答案 1 :(得分:0)

在 URL 模式中使用 url() 改为使用 re_path。

from django.urls import path, re_path

from . import views
from django.views.generic import TemplateView

urlpatterns = [
    re_path('', TemplateView.as_view(template_name="frontend/index.html")),
    # match all other pages

]

这是解决此问题的最简单方法。