django - uwsgi静态文件加载错误表单django(react和webpack)
问题描述
我的应用程序由 django 和 react 组成,最后捆绑到静态 (.js) 文件中。我的目标是为其设置一个 nginx,但现在我只想在 uwsgi 中运行以查看它是否有效。Aaaaand 它根本不起作用。我相信加载这个 webpack 正在编译的捆绑文件存在问题。
与 uwsgi 的连接有效,服务器已启动并正在运行,但是当连接到 127.0.0.1:8080 时,我得到(在 Mozilla 中):
The resource from “http://127.0.0.1:8080/static/frontend/main.js”
was blocked due to MIME type (“text/html”) mismatch
(X-Content-Type-Options: nosniff).
# and another
GET http://127.0.0.1:8080/static/frontend/main.js
HTTP/1.1 404 Not Found
Content-Type: text/html
X-Frame-Options: DENY
Content-Length: 3277
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Vary: Origin
我发现了类似的主题:Django 上的静态 STATIC_URL 和 STATIC_ROOT 之间的区别
这:Django + React 由于 MIME 类型(“text/html”)不匹配(X-Content-Type-Options:nosniff),资源被阻止
但乱搞python manage.py collectstatic
什么都没解决。
我有这行代码来管理静态文件:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join('/app/label_it/front/static/frontend/')
这就是我开始 uwsgi 连接的方式:
python manage.py collectstatic --no-input
uwsgi --http 0.0.0.0:8080 --master --enable-threads --module label_it.wsgi
除此之外collectstatic
,我还尝试使用以下方法弄乱<script src"static_file_path"></script>
此静态路径:
<script src="../../static/frontend/main.js"></script>
# and
<script src="{% static "frontend/main.js" %}"></script>
结果什么都没有。
任何线索表示赞赏!
编辑:
我的文件结构:
解决方案
好的,我刚刚对自己的服务器和 django 项目进行了一些测试以确认我的怀疑,我得出以下结论:如果静态文件的路径不存在,则会发生此错误。这意味着 uwsgi 无法main.js
使用您的设置找到此文件。
我的建议是执行以下操作,以确保您的静态文件以 django 知道在哪里查找的方式正确提供。
默认情况下,django 在每个已安装的应用程序中搜索static
文件夹以查找静态资产。因为您的项目不是这样设置的,所以您必须指定静态文件所在的其他目录。
这是STATICFILES_DIRS
为了什么。
在你settings.py
放以下
STATICFILES_DIRS = [
BASE_DIR / 'label_it/front/static'
]
这将使label_it/front/static
django 可以发现里面的所有文件。
现在这意味着
<script src="{% static "frontend/main.js" %}"></script>
将(希望)工作。
urls.py
此外,如果您还没有在文件中包含静态 url,请记住。
urls.py
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
...
]
# static content urls
urlpatterns += staticfiles_urlpatterns()
旁注:STATIC_ROOT
旨在成为您运行时收集所有静态文件的位置python manage.py collectstatic
。
因此,它应该是一个空目录,最好在 django 项目的根目录中。
STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected')
文件夹的名称并不重要,我已经用作static_collected
示例。
如果您希望运行该命令,您会看到label_it/front/static/
那里复制的所有文件。
推荐阅读
- reactjs - Apollo useReactiveVar 抛出 TypeError: rv.onNextChange is not a function
- web - 从网站打开并向身份验证应用程序发送数据
- winapi - WM_MOUSEMOVE / wParam 不包含键状态,仅当按下任何鼠标按钮时
- html - 内容不会将大小调整为 pagewrapper
- javascript - 使用 HTML + JS 进行动态搜索
- javascript - 检查类是否包含jQuery中的类
- sql - 如何在 SQL 中从一张表编写双重查询
- python - 尝试在 pytorch 中使用经过训练的 FNN 模型时出现运行时错误(mat1 和 mat2....)
- python-3.x - 我的代码一直循环最后一部分并且不会打印
- mongodb - 在 fastify-session 上编写 set/get/destroy 方法以将会话存储到 MongoDB 中?