2012-02-03 75 views
0

我們正在研究使用Django 1.3的staticfiles + django-compressor來獲取CloudFront上的媒體。但是,我們很難找出將最新URL添加到唯一緩存攔截器的最佳方式,因此我們不必費盡心思創建新的分發或失效請求。Django 1.3 staticfiles + django-compressor + CloudFront

有沒有人有任何如何使用staticfiles + django-compressor做到這一點的例子?例如,

/aks290209sdlk/media/css/base.css 

每次我們部署,改變散:

/fslk39sod/media/css/base.css 

這意味着{%靜態%}模板標籤也需要意識到的改變。我們有多個應用程序服務器,因此無論我們需要在它們之間保持同步。

+0

對不起,但我真的不明白這個問題; django-compressor會根據文件的mtime或根據其內容計算(用戶可定義)自動命名文件。如果您打算將靜態文件部署到CDN,他們實際上建議使用該文件的內容,因爲mtime可能會因當前正在使用的服務器而有所不同。無論哪種方式,更改文件將導致一個全新的文件名,所以實際上沒有緩存可以破解。 – 2012-02-03 22:27:17

回答

0

這不是您的問題的答案,而是因爲您說您正在評估資產管理人員,這並不完全偏離主題。

我不太瞭解django壓縮機,但我個人發現其他資產管理器更容易/更好用。您可以從:http://www.djangopackages.com/grids/g/asset-managers/中選擇一個,具體取決於您的具體需求。我正在使用django-mediagenerator,它使用起來非常簡單但功能強大。首先,你在你的settings.py定義媒體包:

MEDIA_BUNDLES = (
    ('main.css', 
     'css/reset.css', 
     'css/design.css', 
    ), 
    ('main.js', 
     'js/jquery.js', 
     'js/jquery.autocomplete.js', 
    ), 
) 

然後定義媒體處理路徑,也settings.py:

ROOT_MEDIA_FILTERS = { 
    'js': 'mediagenerator.filters.yuicompressor.YUICompressor', 
    'css': 'mediagenerator.filters.yuicompressor.YUICompressor', 
} 

- 你可以結合腳本,然後壓縮,合併成一個文件,給他們加上散列等等。

然後你只需要打電話:./manage.py generatemedia和voila(好吧,不是很完美 - 你需要在settings.py中輸入更多的設置,但是沒有什麼難以理解的) 。

在它看起來像這樣的模板:

{% include_media 'main.css' media='screen,print' %} 
<img src="{% media_url 'some/image.png' %}" /> 

正如你可以看到這是Django的壓縮機做法相反 - 這裏,你確定你的資產在settings.py前期,然後引用它們。

+2

呃。無需在settings.py文件中列出每一個靜態文件是使用django-compressor的主要優點之一。誰首先認爲這將是一個好主意,是一個虐待狂。 – 2012-02-03 22:24:22

+0

@Chris:如果你想開始一場火焰戰爭,那麼讓我們轉到聊天:-) – 2012-02-03 22:55:38

0

你可能將DEBUG設置爲True嗎?我相信django-compressor只會在DEBUG = False時進行散列。