django - 使用 Webpack 配置 React 路由、Django URL
问题描述
教自己如何将 React 前端与 Django 服务器一起使用,但我很难让 React 路由正常工作。每当我重新加载页面时,它都会认为我正在向服务器发出 GET 请求。在 localhost:8000 刷新工作正常,但除了 API 路由错误之外的任何内容。
很确定问题出在我的一个 urls.py 文件中。
quiz_app/urls.py
urlpatterns = [
path('', include('quizzes.urls')),
path('', include('frontend.urls'))
]
frontend/urls.py
urlpatterns = [
path('', views.index )
]
quizzes/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path(r'^nested_admin/', include('nested_admin.urls')),
re_path('api/quizzes/', views.QuizList.as_view()),
re_path('api/quizzes/<str:name>/', views.SingleQuiz.as_view()),
re_path('api/questions/', views.QuestionList.as_view()),
re_path('api/answers/', views.AnswerList.as_view())
]
为了更好的衡量:
frontend/views.py
def index(request):
return render(request, 'frontend/index.html')
frontend/src/App.js
class App extends Component {
render() {
return (
<Router>
<div className="App">
<Grid>
<Header />
<Route exact path="/" component={Quizzes} />
<Route exact path="/:name" component={Quiz} />
</Grid>
</div>
</Router>
)
}
};
重申一下,问题在于"/:name"
App.js 中的路由试图向 Django 服务器发出“GET”请求并出错,因为没有什么可以处理它们,而不是默认使用 React 路由。让我知道我在这里做错了什么。在将 React 与其他服务器框架一起使用时,我已经解决了这个问题,但我是 Python/Django 的新手,所以不知道从哪里开始。
解决方案
如果我正确理解您的问题,则views.html
呈现将运行App.js
. 你遇到的问题是,如果你去一个 URL http://yourserver/my-quiz
,那里my-quiz
是一个测验名称,请求将被发送到 Django 服务器,它说:404,我不知道那个 URL。
一种可行的解决方案是向您的 Django 主应用程序添加一条包罗万象的路由:
urlpatterns += re_path(r'.*', views.index)
作为最后一条路线。这只是让 Django 为每个请求呈现您的应用程序,并且 react-router 将负责路由。
这样做的缺点是,如果页面真的不存在,您将不会得到 404 (在您的情况下,没有该名称的测验)。除了复制路由配置外,我还没有找到解决方案(在您的情况下,如果存在具有该名称的测验,则检查 Django 应用程序)。
推荐阅读
- sql-server - 在动态 SQL 中使用变量
- javascript - 编辑 Google Doc 然后转换为 PDF 的脚本
- flutter - 根据 Flutter 中的滚动位置更改容器的宽度
- scrapy - 带有“部署失败(400)”的scrapyd-deploy
- python - 如何在python中将行的每个元素转换为列?
- date - 在 DOM 中的日期之间变得不同
- html - h1、h2、h3 标签调整大小不同于 p 标签
- ruby-on-rails - 使用 Image_tag,如果加载失败,则呈现替代方案
- wordpress - 从本地 wordpress 迁移到服务器的问题
- java - 使用 Optional 简化许多 if 检查