错误404在DigitalOcean上托管的Django应用程序中提供媒体文件

2024-04-26 22:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个小的Django应用程序,我想在生产中使用通过Django管理面板上传的文件
这是我的settings.py文件

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
MEDIA_URL = ''
MEDIA_ROOT = BASE_DIR

我信任管理员上传的文件,希望能够轻松地为它们提供服务(没有AmazonS3和类似的服务),所以我尝试将上传的文件与其他静态文件放在一起

image = models.ImageField(upload_to='static/images')

通过管理面板上传图像后,我在DigitalOcean控制台中运行python manage.py collectstatic。每当我尝试访问图像时,我都会收到错误404,而所有其他静态文件(都是真实的静态文件,未通过管理面板上载)都会成功加载

我在本地做了同样的事情,没有问题,一切都按预期加载(DEBUG=True在本地和DigitalOcean上都设置了)。是否有某种安全措施不让上传的文件以静态形式结束?如果我信任通过管理面板上传的文件,如何绕过它


1条回答
网友
1楼 · 发布于 2024-04-26 22:52:11

如果您使用manage.py runserver运行您的网站

首先确保媒体正在主urls.py中服务

urlpatterns = [
...
] + [
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
]

然后,您可以使用runserver with unsecure在有或没有DEBUG=True的情况下运行您的网站

python manage.py runserver 0.0.0.0:80  insecure

https://docs.djangoproject.com/en/3.2/ref/contrib/staticfiles/#cmdoption-runserver-insecure

在django文档中,这不是为您的文件提供服务的推荐方式,您应该使用像nginx或apache这样的反向代理

或者如果你真的不想使用反向代理,你可以试试whitenoise http://whitenoise.evans.io/en/stable/django.html

相关问题 更多 >