Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django静态文件服务与React路由器冲突_Python_Django_Reactjs - Fatal编程技术网

Python Django静态文件服务与React路由器冲突

Python Django静态文件服务与React路由器冲突,python,django,reactjs,Python,Django,Reactjs,我的网站使用Django作为后端,React.js作为前端。前端使用react脚本编译,这样Django后端就可以作为静态文件使用。使用“python manage.py runserver”运行web应用程序时,我面临以下问题: 该网站只提供根url“http:localhost:8000/”的查找服务。但是,如果要转到子URL“”后端无法加载所有静态文件。来自后端的日志如下所示: [20/Jan/2020 20:23:43] "GET /team/static/media/%E8%82%96

我的网站使用Django作为后端,React.js作为前端。前端使用react脚本编译,这样Django后端就可以作为静态文件使用。使用“python manage.py runserver”运行web应用程序时,我面临以下问题:

该网站只提供根url“http:localhost:8000/”的查找服务。但是,如果要转到子URL“”后端无法加载所有静态文件。来自后端的日志如下所示:

[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%82%96%E8%8A%B7%E7%8E%A5.93cb5dfd.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E6%9D%8E%E4%B8%80%E5%87%A1.e74fa446.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E9%83%87%E5%AE%87%E6%AC%A3.af12f28b.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E9%AB%98%E8%AF%97%E5%85%83.ff52ce19.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%83%A1%E6%B7%87%E5%AA%9B.88f0c659.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E7%8E%8B%E9%80%B8%E5%87%A1.4fe694ba.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%B4%BA%E9%80%B8%E6%83%9F.e77dedac.jpg HTTP/1.1" 200 3137
Django会自动将“/team/”追加到“/static/”前面,因此无法找到并呈现最初位于“/static/”中的所有文件。这是非常棘手的,我无法在网上找到任何解决方案

这是我的URL.py:

来自django.contrib导入管理
从django.url导入路径,包括,re_路径
从django.conf导入设置
从django.conf.url.static导入静态
从django.views.static导入服务
from.views导入索引
URL模式=[
路径(“”,索引,name='index'),
路径(r'^.*$',索引),
] 
在哪里

My settings.py如下所示:

[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%82%96%E8%8A%B7%E7%8E%A5.93cb5dfd.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E6%9D%8E%E4%B8%80%E5%87%A1.e74fa446.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E9%83%87%E5%AE%87%E6%AC%A3.af12f28b.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E9%AB%98%E8%AF%97%E5%85%83.ff52ce19.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%83%A1%E6%B7%87%E5%AA%9B.88f0c659.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E7%8E%8B%E9%80%B8%E5%87%A1.4fe694ba.jpg HTTP/1.1" 200 3137
[20/Jan/2020 20:23:43] "GET /team/static/media/%E8%B4%BA%E9%80%B8%E6%83%9F.e77dedac.jpg HTTP/1.1" 200 3137
STATIC\u ROOT=os.path.join(基本目录'build','STATIC')
静态URL='/STATIC/'
静态文件\u目录=[
join(基本目录'build/static')
]
媒体URL='/MEDIA/'
MEDIA\u ROOT=os.path.join(基本目录'build','MEDIA')
STATICFILES\u STORAGE='whitenoise.STORAGE.CompressedManifestStaticFilesStorage'STATIC\u ROOT=os.path.join(BASE\u DIR,'build','STATIC')

有人知道有没有办法摆脱Django自动附加的“/team/”前缀吗?

与其试图改变提供静态文件的方式以避免与react statics冲突,不如将Django的静态文件路由命名为除
static
之外的东西,例如,将其命名为
staticfiles
,即
STATIC\u URL='/staticfiles/'


您也不需要更改文件夹名称,因此
STATIC\u ROOT=os.path.join(BASE\u DIR,'STATIC')
将按预期工作,然后尝试重定向
/staticfiles
使用nginx路由到您的静态文件文件夹。

这对我来说也是一个头疼的问题。。我设法通过将我的网站域添加到
package.json中的
homepage
来修复它

{
  "name": "frontend",
  "homepage": "https://example.com/",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@emotion/styled": "^11.1.5",
    "@sindresorhus/slugify": "^1.1.0",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
...
我认为这并不是很理想,特别是如果你有多个域名,但这是最简单的方法让它工作<代码>
/
对我不起作用

差别非常微妙。在使用
主页:“.”
运行
构建后,我的
资产清单
如下所示:

{
  "files": {
    "main.css": "/static/css/main.f45be922.chunk.css",
    "main.js": "/static/js/main.a84f15c1.chunk.js",
    "main.js.map": "/static/js/main.a84f15c1.chunk.js.map",
    "runtime-main.js": "/static/js/runtime-main.f8f17c43.js",
...
{
  "files": {
    "main.css": "./static/css/main.f45be922.chunk.css",
    "main.js": "./static/js/main.a84f15c1.chunk.js",
    "main.js.map": "./static/js/main.a84f15c1.chunk.js.map",
    "runtime-main.js": "./static/js/runtime-main.f8f17c43.js",
...
使用
“主页”运行后:https://example.com“
,它看起来像这样:

{
  "files": {
    "main.css": "/static/css/main.f45be922.chunk.css",
    "main.js": "/static/js/main.a84f15c1.chunk.js",
    "main.js.map": "/static/js/main.a84f15c1.chunk.js.map",
    "runtime-main.js": "/static/js/runtime-main.f8f17c43.js",
...
{
  "files": {
    "main.css": "./static/css/main.f45be922.chunk.css",
    "main.js": "./static/js/main.a84f15c1.chunk.js",
    "main.js.map": "./static/js/main.a84f15c1.chunk.js.map",
    "runtime-main.js": "./static/js/runtime-main.f8f17c43.js",
...
每个文件开头的
产生了差异,我的程序最终能够找到静态数据


如果有人知道一个更干净的方法来解决这个问题,请分享

如何获取静态文件,您是否确保在之前添加“/”以从基本url localhost:8000获取静态文件。另外,我有一个预配置的完全运行的Django项目,如果您愿意,它可以与Webpack一起使用,它干净且易于使用。如果我直接输入'localhost:8000',静态文件将从'/static/js/main.6e43aa73.chunk.js'加载。如果我输入“localhost:8000/team/”。静态文件将从“/team/static/xxx”加载,这是不需要的。这就是你要问的吗?如果你能给我看一下你预配置项目的链接就好了。谢谢嘿,我已经添加了一个很好的教程,包含了您可能需要的所有内容,请让我知道您的想法,如果它解决了您的问题,这是一个完整的安装包,您可以按照指南进行操作,它将为您提供一个使用django、react、webpack、deployment等的良好起点。。。这本指南是一本快速阅读的书,将来会为你节省大量的时间。如果您发现任何问题,也可以随时提供帮助