当前位置: 代码迷 >> python >> 处理媒体django
  详细解决方案

处理媒体django

热度:83   发布时间:2023-07-14 09:49:08.0

我正在尝试处理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_nameproject_name/app_name/media/app_name中,为什么媒体文件以不同的方式存储。

最后:

  1. 如何在开发中提供媒体文件?
  2. 如何在生产中提供媒体文件?

当我上传图像时,由于要从类似于后者的路径访问静态文件,因此图像将被存储到project_name/media/app_nameproject_name/app_name/media/app_name中,为什么媒体文件以不同的方式存储。

媒体文件将上传到MEDIA_ROOT目录。 您的MEDIA_ROOTmedia ,因此django将在那里保留上传的文件。

另外,如果在FileFieldImageField使用upload_to路径,则django将相应地创建所需的文件夹。 例如,对于这样的事情:

image = models.ImageField(upload_to='myapp/')

Django将在media内部创建一个myapp文件夹,并将上传的图像保存在该文件夹中。

  1. 如何在开发中提供媒体文件?

由于这一行代码:

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

它告诉django在MEDIA_URL提供MEDIA_ROOT目录。

  1. 如何在生产中提供媒体文件?

配置您的Web服务器以提供媒体和静态文件。 Django不提供媒体和静态文件,因为这样做不擅长。 像Nginx或Apache这样的实际Web服务器已配置为有效地提供静态文件。