You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成React构建产物后路由异常求助:刷新/直接访问URL报404

解决Django+React路由404问题

问题原因

通过React的<Link>跳转是前端路由在本地处理,不会向Django发送新请求;但直接在地址栏输入路由或刷新页面时,浏览器会直接向Django发起请求,而你的Django URL配置里只处理了根路径/,没有匹配/customer/dashboard这类前端路由,所以返回404。

解决方案

1. 修改Django的urls.py,添加通配符路由

把所有非API的请求都转发到React的index.html,让前端路由接管。注意API路由必须放在通配符路由前面,避免API请求被拦截:

from django.urls import path
from rest_framework_simplejwt.views import TokenRefreshView
import views

urlpatterns = [
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('', views.index, name='index'),
    # 新增:匹配所有带斜杠的路径,转发到index视图
    path('<path:path>', views.index, name='catchall'),
]

2. 确认React使用BrowserRouter

确保你的React项目用的是BrowserRouter(不是HashRouter),这样前端路由才能和Django的配置配合:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import Dashboard from './components/Dashboard';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/customer/dashboard" element={<Dashboard />} />
        {/* 其他前端路由 */}
      </Routes>
    </Router>
  );
}

export default App;

3. 检查Django静态文件与模板配置

确保Django能正确加载React build后的静态资源和index.html:
在settings.py中调整以下配置(路径根据你的项目结构修改):

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# 模板目录包含React build文件夹
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'build'],  # 这里是React执行npm run build后的build目录路径
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 静态文件目录指向React build下的static文件夹
STATICFILES_DIRS = [
    BASE_DIR / 'build/static',
]

# 生产环境需要配置STATIC_ROOT,开发环境可忽略
# STATIC_ROOT = BASE_DIR / 'staticfiles'

4. 开发环境验证

重启Django服务器,现在直接输入http://127.0.0.1:8000/customer/dashboard或刷新页面,应该能正常加载React组件了。

内容的提问来源于stack exchange,提问作者user22257988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:55:20