Медиа-ссылки Django в CSS-файлах - PullRequest
36 голосов
/ 21 июня 2009

В шаблонах 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? */
}

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

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

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

Ответы [ 4 ]

46 голосов
/ 21 июня 2009

Откуда ваш файл 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 %}

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

6 голосов
/ 24 июня 2009

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

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

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

Что я делаю:

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

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

3 голосов
/ 21 июня 2009

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

0 голосов
/ 21 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...