Django: css ссылки на носители в статических файлах (django dev / 1.3 / статические файлы) - PullRequest
13 голосов
/ 01 февраля 2011

Как и любой другой пользователь 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 для развертывания.

Идеи

Ответы [ 2 ]

19 голосов
/ 01 февраля 2011

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

Я столкнулся с той же проблемой и использовал относительные пути для ее решения.Единственное, что нужно иметь в виду, это то, что при развертывании изображений необходимо (очевидно) оставаться по тому же пути относительно файлов 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

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

1 голос
/ 13 февраля 2011

Хорошо,

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

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

и

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

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

...