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">
Надеюсь, что это поможет!