Django: css ссылается на носители в статических файлах (django dev/1.3/static files)

Как и любой другой пользователь пользователя django, я обслуживаю статические файлы. Я решил использовать django-staticfiles, чтобы быть готовым к django 1.3, который будет в основном интегрировать его в ядро ​​.

Мой вопрос довольно прост - это отлично подходит для объединения нескольких источников мультимедиа и единообразного обращения к ним в шаблонах django. Тем не менее, я часто использую фоновые изображения в Css следующим образом:

#itemname { background-image: url('/path/to/image.png'); }

Мой вопрос прост - если я использую абсолютные имена, мне приходится их жестко кодировать. Если я использую относительные имена, переходя к "подкаталогу", URL-адреса помещают местоположение ресурсов для этих элементов, и они не могут быть загружены.

Итак, как мне расширить это решение для CSS? Указанное решение должно избегать:

  • Вложение css в html. Я лично избегаю этого.
  • Использование жестко заданных URL. Это не очень хорошо, потому что в моей локальной установке я обычно использую "localhost/project" с apache для тестирования (mod_wsgi), тогда как я использую project.com для развертывания.

Идеи?

Ответы

Ответ 1

Вы сказали, что у вас проблемы с относительными путями, но я не понимаю, что вы имели в виду.

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

Моя настройка в двух словах:

Примечание. Я все еще использую django-staticfiles с Django 1.2, но он должен работать аналогично для Django 1.3

STATIC_URL = "/site_media/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"),
)

Затем я обслуживаю CSS из {{ STATIC_URL }}css/style.css, который ссылается на изображения в ../images/logo.png.

и мой проект выглядит следующим образом:

project_dir
  ...
  stuff
  static_media
    ...
    css
    images

Сообщите мне, есть ли у вас какие-либо вопросы, и я уточню.

Ответ 2

Хорошо,

Я не знаю, если что-то не так с решением @John, но это не сработало для меня, тогда я помещаю этот код в CSS

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

и

<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css">

Надеюсь, что это поможет!