URL-адреса мультимедиа Django в файлах CSS
-
06-07-2019 - |
Вопрос
В шаблонах 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
контекстная переменная.
Какое решение?
Редактировать: Должен отметить, что проблема возникает из-за того, что мои статические медиа-файлы фактически расположены в отдельном медиа-поддомене, тем самым сводя на нет использование относительных путей. Понял, спасибо!
Решение
Откуда ваш файл 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 %}
Конечно, первый вариант намного аккуратнее.
Другие советы
Извините, вам не понравится ответ.
У меня та же проблема:
Не существует простого способа сделать это со статическим CSS-файлом.
Что я делаю:
- сервер отладки, работа локально, мультимедиа обслуживается локально
- производственный сервер размещен где-то в коммерческом месте с медиафайлами на Amazon S3.
- Файл settings.py автоматически устанавливает MEDIA_URL (DEBUG и т. д.) посредством проверки имени хоста (чтобы отличить производственную версию отлокальный/домашний/отладка)
- Все файлы HTML имеют ссылки CSS с {{media_url}} (+Contexts для представлений) (+requestContext)
- Мне нравятся абсолютные имена путей, поэтому сценарий «update_s3»:(1) изменяет каждый файл CSS временно исправить URL ("/media 'на URL (" s3.mydomain.com/media' и(2) обновляет/загружает мой каталог /media на Amazon S3
Затем я перехожу к производству, делаю обновление svn, касаюсь файла WSGI и проверяю.
Является ли использование относительных путей (для файлов изображений) в ваших файлах CSS подходящим вариантом для вас? Р>
Если вы хотите использовать директивы шаблона в файле, почему он не передается через шаблон?