2013-07-21 59 views
5

在我的Django項目的應用程序my_app有它引用一個javascript靜態文件的模板:Django的靜態文件不更新

<script src="{% static 'my_app/my_script.js' %}"></script> 

一旦我安裝程序my_app /模板/程序my_app my_script.js,一切似乎工作。 在某些時候,我用一個不同的腳本覆蓋了my_script.js,使得my_script.js現在有不同的內容。

但是,當我加載my_app與我的瀏覽器,它加載舊的my_script.js,雖然它不再存在。 我該如何解決它? 謝謝。

回答

2

您可以添加一個cache-busting?get =參數。我喜歡定義一個讀取文件的{%statichash%}模板標籤,並將文件內容的散列追加爲get參數。這是類似的,使用該文件的修改時間,而不是哈希的,但同樣的想法:

https://bitbucket.org/ad3w/django-sstatic/src/4401a4bc3058618dfc2eafaee6a23d287a99ede5/sstatic/templatetags/sstatic.py?at=default

+0

感謝刷新頁面。我應該使用「?get = parameter」像這樣:?然後將{%statichash%}添加到模板中?我剛剛嘗試過,它似乎不喜歡{%statichash%}。 – jazzblue

+0

不,對不起,get =參數只是我試圖聰明,並結合解釋和一個例子。只需從bitbucket鏈接中將sstatic模板標記代碼複製到您的templatetags文件中(如果您還沒有django文檔,請查看如何添加一個django文檔),並使用{%sstatic'foobar'%}而不是{%靜態'foobar'%}。 Hieu Nguyen的方法也應該可行,但還沒有測試過,可能需要將?v = 0000X移到%}之後。 – AdamKG

6

我經常使用?v=00001或任何確定數量的強制清除高速緩存中的瀏覽器。所以你的情況可能是:

<script src="{% static 'my_app/my_script.js?v=00001' %}"></script> 

或者:

<script src="{% static 'my_app/my_script.js' %}?v=00001"></script> 

下一次你改劇本,增加了數00002。當然也有很多方法可以做到這一點,但我還是更喜歡這種方法。

+0

這看起來很簡單,很好,但不知何故,我的Firefox不喜歡它,不知道其他瀏覽器。 – jazzblue

+0

答覆已更新。現在怎麼樣? –

+0

在Chrome中完美工作,最佳答案。謝謝。 –

0

我修復了它,包括編寫代碼來刷新瀏覽器。 這樣,它將始終獲取最新更新的靜態文件,而不是從其緩存讀取 。

有3種方法可以做到這一點。

  1. 手動刷新頁面

使用Windows操作系統與瀏覽器谷歌Chrome或IE9,打(CTRL + F5)

  • 刷新頁面一定的時間間隔(在本例中,瀏覽器刷新每3秒) <head>

    <meta http-equiv="refresh" content="3" >

    </head>

  • 當用戶點擊一個按鈕

    <form>

    <INPUT TYPE="button" onClick="history.go(0)" VALUE="Refresh">

    </form>