如何集成 Django 和 react-router-dom?

Posted

技术标签:

【中文标题】如何集成 Django 和 react-router-dom?【英文标题】:How do I integrate Django and react-router-dom? 【发布时间】:2019-03-21 09:01:13 【问题描述】:

如何设置 Django urls.py 和 React 组件来建立它? 我的要求是让 Django 使用 urls 文件呈现主页:

urlpatterns = [
    path('', views.index),
    ]

React 路由器然后应该渲染后续链接(例如 /home、/about)

【问题讨论】:

你能提供更多细节吗? “建立这个”是什么意思? 编辑了更多信息 【参考方案1】:

要使用 django 2.0 path 语法设置包罗万象的路由,请使用 <path:> converter。这会将任何 url 路由到从 views.index 提供的 react 应用程序。

urlpatterns = [
    path('<path:route>', views.index),
]

对于正则表达式路由,一个空字符串是一个包罗万象的。

urlpatterns = [
    re_path('', views.index),
]

如果您有不应路由到 react 应用的路由,则必须首先包含这些路由。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<path:route>', views.index),
]

【讨论】:

我使用的是 Django 3.1,&lt;route:path&gt; 不适合我。不过,&lt;path&gt; 成功了。 route 部分是否在这里提供了一些不明显的功能? @Derek。谢谢你抓住那个。其实我弄错了,没有人注意到。应该是&lt;path:route&gt;,我现在已经编辑了我的答案以更正它。这里的“路由”只是段的名称,将作为关键字参数传递给视图函数。使用path: 转换器的原因也是为了捕获可能包含任何/ 的uls。如果你只使用&lt;path&gt;,我认为它相当于&lt;str:path&gt;。默认的str: 转换器不接受/,因此它不是真正的包罗万象的路由。【参考方案2】:

您的 React 应用程序将从单个页面提供服务。我假设您的 view.index 是您的空白 html,通常看起来像这样:

<div id="root"></div> <script src="/dist/bundle.js"></script>

(确保您的应用程序包在脚本标记中提供)。 Django 将提供带有关联路由的 html 文件。在您的情况下,如果您希望应用程序的根是 React,那么您的 urls.py 将如下所示:

urlpatterns = [ path('/', views.index), ]

一旦 Django 提供了 html 文件,并且脚本标签完成将您的应用程序加载到该页面上 - 此时它将进入您的 React 应用程序的根目录,并且 React-Router 将从那里接管。 Django 不会知道任何进一步的路由,因为一旦 React 接管路由是“虚拟的”。我希望这能回答您的问题 - 如果您需要任何进一步的信息,请告诉我。

【讨论】:

能够让它工作 :) 关于如何让 react-router-dom 中的 BrowserHistory 与 django 后端一起工作的任何想法? Nvm,能够通过使用 HashRouter 来修复它:) 很高兴您找到了解决方案!供将来参考this 是关于浏览器历史对象的线程。

以上是关于如何集成 Django 和 react-router-dom?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django + react-router 找不到 404 页面

reactjs和django如何结合或集成

如何最好地集成 Flex 和 Django?

如何集成 Django 和 react-router-dom?

如何集成 Django 和 XMPP-over-BOSH

如何将 vue.js 与 django 集成?