当前位置: 首页 > 面试题库 >

如何使用django-storages和Amazon S3设置Django项目,但为静态文件和媒体文件设置不同的文件夹?

岳永思
2023-03-14
问题内容

我正在配置一个Django项目,该项目使用服务器文件系统来存储应用程序的静态文件(STATIC_ROOT)和用户上传的文件(MEDIA_ROOT)。

我现在需要将所有内容托管在Amazon S3上,因此我为此创建了一个存储桶。使用django-storages与boto存储后端,我设法收集静态上传到S3斗:

MEDIA_ROOT = '/media/'
STATIC_ROOT = '/static/'

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'KEY_ID...'
AWS_SECRET_ACCESS_KEY = 'ACCESS_KEY...'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

然后,我遇到一个问题:存储桶中未使用MEDIA_ROOTSTATIC_ROOT,因此存储桶根目录同时包含静态文件和用户上载的路径。

因此,我可以设置:

S3_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL + STATIC_ROOT
MEDIA_URL = 'S3_URL + MEDIA_ROOT

并在模板中使用这些设置,但是使用将它们存储在S3中时,静态/媒体文件没有区别django-storages。

如何做到这一点?


问题答案:

我认为以下内容应该可行,并且比Mandx的方法更简单,尽管它非常相似:

创建一个s3utils.py文件:

from storages.backends.s3boto import S3BotoStorage

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media')

然后在你的settings.py

DEFAULT_FILE_STORAGE = 'myproject.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'myproject.s3utils.StaticRootS3BotoStorage'

一个不同但相关的例子(我已经实际测试)可以在这两个可以看到example_的文件在这里。



 类似资料:
  • 我在django站点中使用了storages和django cms应用程序以及azure存储后端。存储效果很好,当我上传文件时,它们会完美地上传到blob容器中。我可以确认文件在那里并且可以公开访问。问题在于django cms显示图像。img src为空,根本不显示图像。我已将MEDIA\u ROOT和MEDIA\u URL都更改为blob存储位置,但仍然没有更改。有什么想法吗?

  • 问题内容: 我将移至Django 1.3,发现媒体和静态文件的这种分离有点令人困惑。这是默认的样子: 我应该投入和?这些应该是单独的目录吗?有什么不同? 问题答案: 静态文件用于javascript /图像等,而媒体文件用于用户上传的内容。

  • 本文向大家介绍如何分离django中的媒体、静态文件和网页,包括了如何分离django中的媒体、静态文件和网页的使用技巧和注意事项,需要的朋友参考一下 django项目中,占很大体积的是静态文件,媒体文件还有html代码,那我们该如何把它们分离出来以方便我们和服务器去管理和使用它们。 static 文件 static ,顾名思义就是静态文件,django自带了一个命令讲项目中所有的静态文件提取出来

  • 问题内容: 我是Django(1.4)的新手,我很难理解静态文件,媒体文件和管理文件的原理。该项目的结构从一个教程到另一个教程都是不同的,对于Webfaction(我将在其中托管应用程序)也是如此。我想知道什么是组织它的最佳方式,并且在将它部署到Webfaction时花费最少的精力和编辑,静态媒体和管理文件的意义是什么?先感谢你 问题答案: 本质上,你想在开发中使用django提供静态文件。准备好

  • 我正试图在Heroku部署我的项目,但媒体文件(图像)过了一段时间就被删除了,所以有人告诉我需要使用一个名为“Amazon S3”的服务,我的问题是,如何配置我的项目来使用该服务。谁能帮帮我吗?

  • 问题内容: 我在磁盘上有一个现有文件(例如/folder/file.txt),在Django中有一个FileField模型字段。 当我做 它将文件另存为file_1.txt(下次是_2,等等)。 我知道为什么,但是我不想要这种行为-我知道我想要与该字段关联的文件确实在那里等着我,我只想让Django指向它。 问题答案: 如果要永久执行此操作,则需要创建自己的FileStorage类 现在在模型中,