根据DEBUG状态提供Django静态内容

时间:2012-11-18 12:51:25

标签: django

我最近设置了一个项目来提供来自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

人们对此解决方案有何看法?我不满意它向前发展。我有什么选择?

1 个答案:

答案 0 :(得分:1)

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

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