1

我最近设置了我们的项目来提供来自 Amazon S3 的静态和媒体文件。这反过来又使我们的项目即使在本地工作时也可以提供来自 S3 的所有内容。

我们的静态设置设置为以下以与 S3 一起使用:

STATIC_ROOT = "/%s/" % STATIC_S3_PATH
STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME

在 URLs conf 文件中,我们添加了以下内容以匹配 Django 文档:

if settings.DEBUG:
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(r'^static/(?P<path>.*)$', 'serve'),
        url(r'^media/(?P<path>.*)$', 'serve'), 
    )

显然,这些 URL 模式不起作用,因为我们在“//s3.ama...”上提供文件。我以我的智慧认为我可以写一段正则表达式来解决这个问题并尝试替换:

url(r'^static/(?P<path>.*)$', 'serve'),

和:

url(r'//s3.amazonaws.com/%s/static/(?P<path>.*)$' % settings.AWS_STORAGE_BUCKET_NAME, 'serve'),

这也不起作用。所以为了最终解决这个问题,我在设置文件中添加了一个条件语句来决定从哪里提供静态文件:

if DEBUG:
    STATIC_URL = '/static/'
else:
    STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME

人们如何看待这个解决方案?我对它的前进并不十分满意。我的替代方案是什么?

4

1 回答 1

1

设置中的条件是一个很好的解决方案。

另一种选择是使用单独的设置文件进行本地设置。

于 2012-11-18T13:12:04.993 回答