2011-02-01 3 views
13

Как и любой другой пользователь пользователя django, я обслуживаю статические файлы. Я решил использовать django-staticfiles, чтобы быть готовым к django 1.3, который будет в основном интегрировать его into the core.Django: css ссылается на носители в статических файлах (django dev/1.3/статические файлы)

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

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

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

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

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

Идеи?

ответ

19

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

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

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

Примечание Я все еще использую Джанго-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 

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

+0

Немного я не уверен, теперь вы ответили - это css 'background-image' urls относительно файла css или URL-адрес, с которого выполняется страница?Если первый, я отсортирован, потому что я могу использовать именно то, что вы наметили. –

+0

Просто протестирован - родственник, похоже, работает в css. Я доволен этим. Имейте тик! –

+0

@John, PROJECT_ROOT также определен где-то вами, или он автоматически определяется Django как ваш текущий корень проекта (где ваш manage.py лежит). Если вы сами определяете PROJECT_ROOT, вам нужно продолжать изменять его в зависимости от того, находится ли он в среде разработки или рабочей среде (как структура каталогов) обоих может быть разным – David

1

Ok,

Я не знаю, если есть что-то не так с @ решением Джона, но он не работал со мной тогда я ставлю этот код на CSS

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

и

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

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

+0

Это означает, что все ваши стили должны быть проанализированы как шаблон ... подумайте о их кешировании! – Stefano