我最近设置了一个项目来提供来自Amazon S3的静态和媒体文件。这反过来又使我们的项目服务于S3的所有内容,即使在本地工作。
我们的静态设置设置如下以使用S3:
STATIC_ROOT = "/%s/" % STATIC_S3_PATH
STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME
在URL conf文件中,我们添加了以下内容以匹配Django文档:
if settings.DEBUG:
urlpatterns += patterns('django.contrib.staticfiles.views',
url(r'^static/(?P<path>.*)$', 'serve'),
url(r'^media/(?P<path>.*)$', 'serve'),
)
显然,这些网址格式无效,因为我们正在“//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
人们对此解决方案有何看法?我不满意它向前发展。我有什么选择?
答案 0 :(得分:1)
设置中的条件是一个很好的解决方案。
另一种选择是使用单独的设置文件进行本地设置。