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
.
Какое решение?
Изменить:. Я должен заметить, что проблема возникает, поскольку мои статические медиафайлы на самом деле расположены в отдельном субдомене мультимедиа, , тем самым отрицая использование относительных путей. Получил это, спасибо!
Ответы
Ответ 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
Если вы хотите использовать директивы шаблонов в файле, почему его не обслуживают с помощью шаблона?