Вопрос

В шаблонах 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 подходящим вариантом для вас?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top