问题描述
我正在尝试处理Django静态和媒体内容。 这是我在settings.py中的代码
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
在urls.py中
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我正在将文件和视频上传到我的网站,即使静态和正在显示媒体内容,也可以正常工作。
我的实际怀疑是-
我实际上在开发环境中运行。
在用于收集静态内容的生产中,通常使用python manage.py collectstatic
进行处理。
但是在根据文档的开发中,名为django.contrib.staticfiles
应用程序用于提供静态文件。
但是媒体文件又如何呢?
当我上传图像时,由于要从类似于后者的路径访问静态文件,因此图像将被存储到project_name/media/app_name
的project_name/app_name/media/app_name
中,为什么媒体文件以不同的方式存储。
最后:
- 如何在开发中提供媒体文件?
- 如何在生产中提供媒体文件?
1楼
当我上传图像时,由于要从类似于后者的路径访问静态文件,因此图像将被存储到
project_name/media/app_name
的project_name/app_name/media/app_name
中,为什么媒体文件以不同的方式存储。
媒体文件将上传到MEDIA_ROOT
目录。
您的MEDIA_ROOT
是media
,因此django将在那里保留上传的文件。
另外,如果在FileField
或ImageField
使用upload_to
路径,则django将相应地创建所需的文件夹。
例如,对于这样的事情:
image = models.ImageField(upload_to='myapp/')
Django将在media
内部创建一个myapp
文件夹,并将上传的图像保存在该文件夹中。
- 如何在开发中提供媒体文件?
由于这一行代码:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
它告诉django在MEDIA_URL
提供MEDIA_ROOT
目录。
- 如何在生产中提供媒体文件?
配置您的Web服务器以提供媒体和静态文件。 Django不提供媒体和静态文件,因为这样做不擅长。 像Nginx或Apache这样的实际Web服务器已配置为有效地提供静态文件。