Подтвердить что ты не робот

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.

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

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

4b9b3361

Ответ 1

Где находится ваш файл 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 %}

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

Ответ 2

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

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

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

Что я делаю:

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

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

Ответ 3

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

Ответ 4

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