2013-07-21 19 views
5

Nel mio progetto Django l'my_app applicazione ha un modello che fa riferimento a un file statico javascript:file statici Django non vengono aggiornati

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

Una volta ho installato my_script.js in my_app/templates/my_app, tutto sembrava funzionare . A un certo punto ho sovrascritto my_script.js con uno script diverso, in modo che my_script.js abbia ora un contenuto diverso.

Tuttavia, quando carico my_app con il mio browser, carica il vecchio my_script.js, anche se non esiste più. Come posso risolverlo? Grazie.

risposta

2

È possibile aggiungere un cache-busting? Get = parametro. Mi piace definire un tag del template {% statichash%} che legge il file e aggiunge un hash del contenuto del file come parametro get. Questo è simile, utilizza ora di modifica del file invece di hash, ma stessa idea:

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

+0

Grazie. Dovrei usare "? Get = parameter" in questo modo: ? E quindi aggiungi {% statichash%} al modello?L'ho appena provato e non mi piace {% statichash%}. – jazzblue

+0

no, mi dispiace,? Get = parametro è solo per me che sto cercando di essere intelligente e unire la spiegazione e un esempio. Copia semplicemente il codice del tag dello sstatic template dal link di bitbucket nel tuo file templatetags (consulta i documenti di django su come aggiungerne uno se non ne hai già uno) e usa {% sstatic 'foobar'%} invece di {% static "foobar"%}. Anche l'approccio di Hieu Nguyen dovrebbe funzionare, ma non averlo testato, potrebbe essere necessario spostare il? V = 0000X dopo il%}. – AdamKG

6

Io uso spesso ?v=00001 o qualsiasi definire il numero di costringere la cache chiaro nel browser. Quindi nel tuo caso potrebbe essere:

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

Oppure:

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

La prossima volta si cambia il copione, aumentare il numero di 00002. Naturalmente ci sono molti modi per farlo, ma io continuo a preferire questo metodo.

+0

Questo sembra semplice e piacevole, in effetti, ma in qualche modo il mio Firefox non gli piace, non è sicuro di altri browser. – jazzblue

+0

Risposta aggiornata. Che ne dici adesso? –

+0

Funziona perfettamente in Chrome, la migliore risposta. Grazie. –

0

L'ho risolto includendo il codice di scrittura per aggiornare il browser. In questo modo, otterrà sempre gli ultimi file statici aggiornati invece di leggere dalla sua cache.

C'è 3 modi per farlo.

  1. aggiornare manualmente la pagina

Utilizzando il sistema operativo Windows con i browser Google Chrome o IE9, ha colpito (CTRL + F5)

  1. aggiornare la pagina in intervalli di tempo determinato (in questo esempio, il browser si aggiorna ogni 3 secondi) <head>

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

    </head>

  2. aggiornare la pagina quando un utente fa clic su un pulsante di

    <form>

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

    </form>

Problemi correlati