Как использовать CSS в Django?

110

Я создаю свое приложение с помощью Django, и мне интересно, как я могу заставить Django использовать мой файл CSS? Какие настройки мне нужно сделать, чтобы Django увидел файл css?

NB: на локальном компьютере

сборщик
источник

Ответы:

48

Если вы используете сервер разработки, следуйте руководству проекта django по управлению статическими файлами для настройки URL-адресов, а затем ссылайтесь на медиафайлы в шаблоне - скажем, изображение внутри папки изображений из /site_media/images/foo.gif.

Джо
источник
25
Небольшая заметка об этих документах Django - убедитесь, что вы выбрали документы для той версии Django, которую используете. Похоже, что между версиями многое изменилось в отношении статических файлов.
Сэм Старлинг,
3
@Sam имеет большое значение. Я всю жизнь не мог разобраться в статических файлах. затем измените установленную версию django и вуаля. это было буквально все, что мне нужно было сделать, потому что, очевидно, я искал документы для неправильной версии.
Джош Браун
36

В более общем плане вы спрашиваете, как обслуживать статический файл из Django. Если вы работаете под Apache, вам следует прочитать http://docs.djangoproject.com/en/dev/howto/deployment/modpython/

Если вы используете сервер разработки (скажем, на своем ноутбуке), прочтите http://docs.djangoproject.com/en/dev/howto/static-files/

Обратите внимание на большой и толстый отказ от ответственности в отношении сервера разработки Django:

  • Использование этого сервера неэффективно и небезопасно.
  • Не используйте это в производственных условиях.
  • Используйте это только для разработки.
Питер Роуэлл
источник
«Не используйте это в производственных условиях». Не могли бы вы подробнее остановиться на этом?
Крис
@Chris: Вы правы, утверждение было немного двусмысленным. Я имел в виду сервер разработки Django. Хотя я несколько раз запускал его на нашем производственном сайте, это было только в течение коротких периодов времени при отладке грубых проблем.
Питер Роуэлл
Спасибо за разъяснения, я смотрел на свои развертывания django, работающие на apache, задаваясь вопросом, что я сделал не так. :)
Крис
1
Ницца. Мне нравится, что 3 пункта говорят об одном и том же по-разному. Спасибо за предупреждение.
KobeJohn
13
Я очень люблю людей, которые приходят через 4,5 года после публикации ответа и голосуют против. Интересно , если они даже знали , что Django был в 11/08 ... наверное , нет. Меня поражают не очки репутации, а проявленная комбинация невежества и высокомерия с намеком на то, что я опаздываю на вечеринку. Интересно, как бы они оценили мои сообщения на comp.lang.c, скажем так, в 1987 году? Лучше не спрашивать.
Питер Роуэлл
13

Это тоже вызывало у меня проблемы некоторое время (404 ошибки not found). Мне не хватало бит, чтобы отредактировать STATICFILES_DIRSкортеж в settings.py, чтобы я получил следующее:

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__),'media').replace('\\','/'),
)

Затем он взял мои файлы CSS в папке с именем «media», которая находилась на верхнем уровне моего проекта django.

Еще у меня было:

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/media/'

(убедитесь, что у вас есть ведущий, /указанный выше STATIC_URL)

Конечно, как сказано выше, вам необходимо, чтобы файл CSS был правильно включен из ваших файлов html. Я имел:

<link href="{{ STATIC_URL }}css/ea_base.css" rel="stylesheet" type="text/css" media="screen" />
jacanterbury
источник
Наконец, ясное, простое и элегантное решение. Прекрасно работает с django 1.5.
pbarill 01
# Всегда используйте косую черту, даже в Windows. .replace('\\','/')не нужно.
Mac
12

Какие настройки мне нужно сделать, чтобы Django увидел файл css?

Никто.

Убедитесь, что ваш шаблон включает файл CSS (как и стандартный HTML), и поместите файл CSS на медиа-сервер.

Чтобы уточнить: с помощью Django настоятельно рекомендуется обслуживать все ваши медиа (все, что не является динамическим html) с другого экземпляра сервера. Как вы это реализуете, полностью зависит от вас, но большинство людей создают поддомен.

Оли
источник
2
Привет, Оли. Я знаю, что этому посту почти 3 года, но все же это лучший способ связать css с шаблонами django? Похоже, что было бы проще всего просто связать css с URL-адресом abs, например static.example.com, и просто хранить все статические файлы по этому URL-адресу.
cp3
0

Самый простой способ использовать css с django - это добавить его в свои шаблоны как статические файлы.

Но это немного похоже на ajax, я не нашел ничего, что подсказывало бы, как его включить стандартным способом.

Для django есть модуль css-компрессора, если вы хотите оптимизировать его размер.

Roch
источник