Python Django静态文件服务与React路由器冲突
我的网站使用Django作为后端,React.js作为前端。前端使用react脚本编译,这样Django后端就可以作为静态文件使用。使用“python manage.py runserver”运行web应用程序时,我面临以下问题: 该网站只提供根url“http:localhost:8000/”的查找服务。但是,如果要转到子URL“”后端无法加载所有静态文件。来自后端的日志如下所示: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
[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等的良好起点。。。这本指南是一本快速阅读的书,将来会为你节省大量的时间。如果您发现任何问题,也可以随时提供帮助