【问题标题】:Why doesn't my React-Django app detect static files?为什么我的 React-Django 应用程序没有检测到静态文件?
【发布时间】:2018-12-12 23:52:44
【问题描述】:

我创建了一个可用的 React + Django REST 项目,它在我的开发机器上运行良好。我已使用以下方法使其在我的 CentOS 7 服务器上运行。

  1. 我使用 npm run build 创建了构建目录并将其复制到 Django 项目根文件夹。

  2. 我在 Django 设置的 TEMPLATES 列表中添加了build 目录,以识别index.html 文件。

  3. 我在STATICFILES_DIRS中添加了build/static文件夹。

  4. 我在根 URLS 文件中添加了 url(r'^.*', TemplateView.as_view(template_name='index.html')), 行以捕获所有 url 模式并将索引文件加载到包含 React 应用程序的构建文件夹中。

  5. 我运行manage.py collectstatic 来创建一个包含所有静态文件的staticfiles 文件夹。

  6. 我将staticfiles 文件夹添加到 Nginx conf 文件中,如下所示:

    location /static/ { root /home/michel/project/staticfiles; }

  7. 我已经重启了nginx服务器。

我正在使用 Django 服务器加载 index.html 文件,我希望 staticfiles 文件夹将包含加载我的 React 应用程序所需的静态文件。

但是,当我访问 www.mydomain.com 时,它会加载 index.html 文件,但不会在 <div id='root'></div> 上加载 React 应用程序。我知道这一点是因为显示了索引的页脚,但用于设置该页脚样式的 css 也不起作用。

我猜我在检测静态文件时遇到了问题。有什么解决办法吗?

编辑 这是将我的 React 应用程序链接到 index.html 文件的代码。

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();

附:由create-react-app 命令自动生成。

【问题讨论】:

  • 贴出TemplateView和index.html header的代码
  • @DmitriiG。 TemplateView 就是我在 urls 文件中使用的那一行。加载索引文件。我已使用索引文件 &lt;head&gt; 标记和其中包含的代码更新了问题。
  • 这对我来说没有任何意义。加载 react 应用的代码在哪里?
  • 我使用create-react-app 来创建我的前端。因此,将应用程序加载到 ID 为 root 的 div 的默认代码用于将我的应用程序加载到该 div。请注意,当我使用 gunicorn bind ... 运行服务器以检查 Gunicorn 时,该应用程序运行良好。
  • 您真的需要帮助吗?我已经问过你两次了,用 django 静态文件路径将你的 react javascript 应用程序代码链接到 index.html 文件中

标签: django reactjs rest django-rest-framework


【解决方案1】:

这可能是因为你不了解 Nginx 的 root 指令。

这个:

location /static/ {
    root /home/michel/project/staticfiles;
}

意味着如果我请求www.yourwebsite.com/static/style.css,那么 Nginx 将期望该文件位置为

/home/michel/project/staticfiles/static/style.css 不是

/home/michel/project/staticfiles/style.css

【讨论】:

  • 我会尝试将我所有的静态文件从staticfiles 移动到static 文件夹并返回。谢谢!
  • 感谢先生的帮助。我已经解决了我的问题。但是,我还有一个问题。我一直将 staticfiles 我的文件夹用于 collectstatic 以“收集”所有静态文件,我不想将其更改为与 React 一起使用。有没有一种方法可以让 Nginx 默认从我选择的文件夹中读取静态文件,而不是 static
  • 哦,原来是他的问题:)。 @MiniGunnR 只需在 nginx 配置中写入您想要的路径: location /staticfiles { root /home/michel/project; }
  • 或者把root /home/michel/project/staticfiles改成alias /home/michel/project/staticfiles
  • 谢谢。现在我明白了。
猜你喜欢
  • 1970-01-01
  • 2015-01-24
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2020-09-11
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多