2009-09-11 20 views

Respuesta

4

Con django-compress, está tratando CSS y JS como archivos dinámicos, lo cual está bien. Sin embargo, los otros archivos son estáticos, y Django realmente no quiere publicarlos. Deben ser atendidos directamente por Apache u otro servidor web.

con Apache, que había puesto algo así como

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

en .htaccess o la configuración global de Apache.

Actualización: Respondiendo a tu comentario - Disculpa, no entendí el matiz de tu pregunta. No hay mucho que pueda hacer para evitar el uso de una URL diferente para indicarle a un cliente que un archivo (por ejemplo, una imagen) ha cambiado. Esto es recomendado por ej. Apache y YAHOO!

La implementación de esto es IMO no demasiado difícil. Está en dos partes:

  1. usar una etiqueta (aquí hay una useful snippet) para generar URL versionados a los archivos multimedia que aparecerán en el código HTML. La URL versionada podría ser la URL base con la versión insertada, p. /media/3/header.png donde el archivo real permanece como /media/header.png en el servidor.
  2. Utilice una herramienta como mod_rewrite para convertir las URL entrantes en el valor canónico, es decir, una solicitud de /media/3/header.png se convierte en /media/header.png. This article describe la función con más detalle.
+0

Sé cómo establecer el futuro lejano expira en las imágenes, pero me preguntaba si hay una mejor manera de manejarlo cuando edito una imagen. Digamos que he header.png con mucho futuro expira. Luego lo edito en photoshop. Tendría que nombrarlo en header1.png y luego cambiar cualquier referencia en el código a header1.png. No es ideal para mi –

6

La mejor manera sería referirse a los archivos estáticos con una URL versionado, y darle a su servidor web una regla de reescritura de ignorar la versión.

Véase un ejemplo completo de Django here, que incluye un ayudante de expire_tag (creado por Arne Brodowski):

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

Y el Apache relevante reglas de reescritura.

+0

Ahora que es bastante hábil. Tendré que recordar ese. –

+0

Agradable, menor desventaja es que este enfoque no versiona las imágenes referidas dentro de CSS. – Bula

Cuestiones relacionadas