2009-09-11 15 views

risposta

4

Con django-compress, si trattano CSS e JS come file dinamici, il che va bene. Tuttavia, gli altri file sono statici - e Django non vuole veramente servirli. Dovrebbero essere serviti direttamente da Apache o da altri server web.

Con Apache, devi mettere qualcosa come

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT" 
</FilesMatch> 

nel .htaccess o la configurazione globale di Apache.

Aggiornamento: Risposta al tuo commento - Mi dispiace non ho capito la sfumatura della tua domanda. Non c'è molto che puoi fare per evitare di usare un URL diverso per indicare a un cliente che un file (ad esempio un'immagine) è cambiato. Questo è raccomandato ad es. Apache e YAHOO!

L'implementazione di questo è IMO non troppo difficile. E 'in due parti:

  1. utilizzare un tag (ecco una useful snippet) per generare gli URL di versione per i file multimediali che appariranno nel tuo codice HTML. L'URL versione potrebbe essere l'URL di base con la versione inserita, ad es. /media/3/header.png dove il file attuale rimane come /media/header.png sul server.
  2. utilizzare uno strumento come mod_rewrite per convertire gli URL in entrata al valore canonica, cioè una richiesta di /media/3/header.png viene convertito in /media/header.png. This article descrive la funzione in modo più dettagliato.
+0

So come impostare il futuro lontano scade sulle immagini, ma mi chiedevo se c'è un modo migliore per gestire quando modifico un'immagine. Diciamo che ho header.png con un futuro molto lontano. Quindi lo modifico in Photoshop. Dovrei nominarlo a header1.png e quindi cambiare qualsiasi riferimento nel codice a header1.png. Non è l'ideale per me. –

6

Il modo migliore sarebbe fare riferimento ai file statici con un URL con versione e assegnare al server Web una regola di riscrittura per ignorare la versione.

Consulta l'esempio completo Django here, che include un expire_tag helper (creato da Arne Brodowski):

<link rel="stylesheet" type="text/css" 
    href="{{ MEDIA_URL }}{% expire_tag "css/reset.css" %}" /> 

e le relative Apache riscrivere le regole.

+0

Ora è piuttosto lucido. Dovrò ricordarlo. –

+0

Bello, piccolo inconveniente è che questo approccio non fa riferimento alle immagini delle versioni all'interno di CSS. – Bula

Problemi correlati