我目前正在构建一个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'))]
答案 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
]
这是解决此问题的最简单方法。