URL-адреса мультимедиа Django в файлах CSS

В шаблонах django обычно делают следующее:

<img src="{{ MEDIA_URL }}/img/someImage.jpg">

Как бы вы это сделали в файле CSS, который не используется в качестве шаблона?

.someClass {
    /* can't do this this */
    background: url("{{ MEDIA_URL }}/img/someImage.jpg");        
    /* either this */
    background: url("http://media.domain.com/img/someImage.jpg");
    /* or this */
    background: url("/django_static_media/img/someImage.jpg");
    /* can't do both... what to do? */
}

Мне нужна возможность обслуживать мои файлы либо из поддомена мультимедиа, либо во время автономной работы и обслуживать их напрямую как статическое представление django. Но файлы CSS представляют собой проблему, поскольку они не обрабатываются как шаблоны, и я не могу использовать контекстную переменную MEDIA_URL.

Какое решение?

Изменить: Я должен отметить, что проблема возникает из-за того, что мои статические файлы мультимедиа фактически расположены в отдельном субдомене мультимедиа, , что исключает использование относительных путей. Понятно. , Благодарность!


person Yuval Adam    schedule 21.06.2009    source источник


Ответы (4)


Откуда обслуживается ваш файл css? Обычно это не проблема, поскольку обычная медиа-структура, такая как:

media/
    images/
    css/
    js/

(или аналогичный) позволяет использовать относительные пути к файлам для изображений, например:

background: url('../images/foo.png');

Если вы не готовы изменить структуру папок мультимедиа с учетом относительных путей к файлам, у вас может не быть альтернативы, кроме как перезаписать объявления css из шаблона, используя вторичный файл css в автономном режиме:

{% if DEBUG %}
    <link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}

Конечно, первый вариант намного опрятнее.

person ozan    schedule 21.06.2009

Извините, вам не понравится ответ.

У меня такая же проблема:

Нет простого способа сделать это с помощью статических CSS-файлов.

Что я делаю:

  • сервер отладки, работа локально, носители обслуживаются локально
  • производственный сервер размещен где-то коммерчески с медиа на Amazon S3
  • Файл settings.py автоматически устанавливает MEDIA_URL (DEBUG и т. д.) с помощью проверки имени хоста (чтобы различать производственную и локальную / домашнюю / отладочную)
  • Все файлы HTML имеют ссылки css с {{MEDIA_URL}} (+ контексты RequestContext для представлений)
  • Мне нравятся абсолютные имена путей, поэтому сценарий "update_s3": (1) временно изменяет каждый файл css, чтобы исправить 'url ("/ media' на 'url (" s3.mydomain.com/media 'и (2) обновляет / загружает каталог my / media в Amazon S3.

Затем я перехожу к производству и делаю обновление svn, касаюсь файла WSGI и проверяю

person joej    schedule 24.06.2009

Является ли использование относительных путей (для файлов изображений) в ваших файлах CSS неприемлемым для вас вариантом?

person ayaz    schedule 21.06.2009

Если вы хотите использовать директивы шаблона в файле, почему он не обслуживается через шаблон?

person ironfroggy    schedule 21.06.2009