Как лучше всего установить далекое будущее на изображениях с Django? - PullRequest
5 голосов
/ 11 сентября 2009

Я использую django-compress с давним будущим сроком для моих файлов css и js. Работает отлично.

Я бы хотел сделать что-то подобное для другого статического контента (изображения, flash и т. Д.). Я могу установить, что срок действия этого контента истекает, но я должен вручную переименовывать файлы при их изменении.

Есть ли лучший способ справиться с этим?

Ответы [ 2 ]

6 голосов
/ 12 сентября 2009

Лучшим способом было бы сослаться на статические файлы с версионным URL-адресом и дать вашему веб-серверу правило перезаписи, чтобы игнорировать версию.

Смотрите полный пример Django здесь , который включает в себя expire_tag помощник (созданный Арне Бродовски ):

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

И соответствующие правила переписывания Apache.

4 голосов
/ 11 сентября 2009

С django-compress вы рассматриваете CSS и JS как динамические файлы - это нормально. Тем не менее, другие файлы являются статическими - и Django не хочет их обслуживать. Они должны обслуживаться непосредственно Apache или другим веб-сервером.

С Apache вы бы поместили что-то вроде

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

in .htaccess или глобальная конфигурация Apache.

Обновление: Ответ на ваш комментарий - Извините, я не понял нюанс вашего вопроса. Вы ничего не можете сделать, чтобы избежать использования другого URL-адреса для указания клиенту, что файл (например, изображение) изменился. Это рекомендуется, например, Apache и YAHOO!

Реализация этого ИМО не слишком сложна. Он состоит из двух частей:

  1. Используйте тег (вот полезный фрагмент ) для создания версионных URL-адресов медиафайлов, которые появятся в вашем HTML. Версионный URL-адрес может быть базовым URL-адресом со вставленной версией, например, /media/3/header.png, где фактический файл остается на сервере как /media/header.png.
  2. Используйте инструмент, подобный mod_rewrite, для преобразования входящих URL-адресов в каноническое значение, то есть запрос на /media/3/header.png преобразуется в /media/header.png. Эта статья описывает функцию более подробно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...