Django的。本地和之间交替远程静态文件

时间:2014-11-25 22:04:10

标签: django django-staticfiles

收集我的静态文件并将其存储在Amazon Bucket(AWS S3)中后,当我在本地运行项目时,它仍然使用在线存储的静态文件,当我想对css文件进行更改时,这是一个问题。例如,我必须运行collectstatic或手动将文件上传到亚马逊。我尝试添加一个新的设置变量" LOCAL_STATICFILES"像这样:

settings.py

LOCAL_STATICFILES = False
if not LOCAL_STATICFILES:
    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    AWS_ACCESS_KEY_ID = os.environ['AWSAccessKeyId']
    AWS_SECRET_ACCESS_KEY = os.environ['AWSSecretKey']
    AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
    S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
    STATIC_URL = S3_URL
    STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

if LOCAL_STATICFILES:
    STATIC_URL = '/static/'

STATIC_ROOT = '/'

但是当我将LOCAL_STATICFILES变为True并且运行服务器时,django无法找到它们。

项目的文件夹如下所示:

  • 项目
    • 应用
    • 应用
    • 静态
      • CSS
      • JS​​
      • IMG
    • 模板

我做错了什么?

1 个答案:

答案 0 :(得分:1)

首先:确保您可以在支持Amazon存储桶配置的环境中区分您是否存在。这意味着,通常这将是您的生产环境,您已经配置了亚马逊桶设置。

所以你会:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# this is the base project path

if 'AWSAccessKeyId' in os.environ:
    # assume the presence of this key will determine whether
    # we are, or not, in the bucket-supporting environment

    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    AWS_ACCESS_KEY_ID = os.environ['AWSAccessKeyId']
    AWS_SECRET_ACCESS_KEY = os.environ['AWSSecretKey']
    AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
    STATIC_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
    # static url will be the re
    STATIC_ROOT = None
    # STATIC_ROOT doesn't matter since you will not invoke
    # `manage.py collectstatic` from this environment. You
    # can safely let it to None, or anything like:
    # os.path.join(BASE_DIR, 'static')
else:
    STATIC_URL = '/static/'
    # the static files url will point to your local,
    # development, server
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    # here, STATIC_ROOT matters, since you will invoke
    # `manage.py collectstatic` from your local environment.