2013-07-21 21 views
5

W moim projekcie Django my_app aplikacja ma szablonu, który odwołuje javascript statyczny plik:Django pliki statyczne nie są aktualizowane

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

Raz zainstalowany my_script.js w my_app/szablony/my_app, wszystko wydawało się działać . W pewnym momencie nadpisałem plik my_script.js innym skryptem, tak że my_script.js ma teraz inną zawartość.

Jednak, gdy ładuję my_app z moją przeglądarką, ładuje stary plik my_script.js, mimo że już nie istnieje. Jak mogę to rozwiązać? Dzięki.

Odpowiedz

2

Możesz dodać parametr "get =" do pomijania pamięci podręcznej. Chciałbym zdefiniować tag szablonu {% statichash%}, który odczytuje plik i dołącza skrót do zawartości pliku jako parametr get. Jest to podobne, wykorzystuje zmodyfikowany czas, kiedy plik, zamiast hash, ale sama idea:

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

+0

Dzięki. Czy mam używać "? Get = parameter" w następujący sposób: ? A następnie dodać {% statichash%} do szablonu?Właśnie tego próbowałem i nie wygląda na to, że {% statichash%}. – jazzblue

+0

Nie, przepraszam, parametr? Get = to tylko ja staram się być sprytny i połączyć wyjaśnienie i przykład. Po prostu skopiuj kod sstatic tagu z szablonu z linku bitbucket do pliku templatetags (przejrzyj dokumentację django, jak go dodać, jeśli jeszcze go nie masz) i używaj {% sstatic 'foobar'%} zamiast {% statyczne "foobar"%}. Podejście Hieu Nguyena również powinno zadziałać, ale nie przetestowało go, może zaistnieć potrzeba przeniesienia v = 0000X na%. – AdamKG

6

często używam ?v=00001 lub dowolny określić liczbę zmusić wyczyścić pamięć podręczną w przeglądarce. Więc w twoim przypadku może to być:

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

Lub:

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

Następnym razem zmienić scenariusz, zwiększenie liczby do 00002. Oczywiście istnieje wiele sposobów, aby to zrobić, ale ja wciąż wolą Ta metoda.

+0

Wygląda to prosto i przyjemnie, ale jakoś mój Firefox go nie lubi, nie jestem pewien co do innych przeglądarek. – jazzblue

+0

Odpowiedź zaktualizowana. A teraz? –

+0

Działa idealnie w Chrome, najlepsza odpowiedź. Dzięki. –

0

Naprawiłem to, włączając w to pisanie kodu, aby odświeżyć przeglądarkę. W ten sposób zawsze pobierane będą najnowsze zaktualizowane pliki statyczne zamiast z pamięci podręcznej .

Jest na to 3 sposób.

  1. ręcznie odświeżyć stronę

Korzystanie z systemu operacyjnego Windows z przeglądarek Google Chrome lub IE9, uderzył (CTRL + F5)

  1. Odśwież stronę w okresy pewien czas (w tym przykładzie, przeglądarka odświeża co 3 sekundy) <head>

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

    </head>

  2. Odśwież stronę, gdy użytkownik kliknie przycisk

    <form>

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

    </form>