2012-11-18 45 views
1

我最近設置了我們的項目以從Amazon S3提供靜態和媒體文件。這反過來又使我們的項目即使在本地工作時也能夠提供來自S3的所有內容。基於DEBUG狀態服務Django靜態內容

我們的靜態設置被設置爲以下與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 

中,人們認爲這個解決方案是什麼?我對前進並不滿意。我有什麼選擇?

+2

'settings.py'中的條件似乎完全合理。你爲什麼不喜歡它? – second

回答

1

在設置條件是一個很好的解決方案。

另一種方法是對本地設置使用單獨的設置文件。

+0

謝謝!很高興我在正確的軌道上。 – m1ket