Создаём своё первое приложение с Django, часть 6¶
Продолжаем начатое в пятой части. Мы создали протестированное веб приложение для опросов и теперь нам надо добавить стили и картинку.
В отличие от HTML, генерируемого сервером, веб приложения обычно нуждаются в обработке дополнительных файлов, таких как изображения, JavaScript или CSS, которые нужны для отображения полной веб страницы. В Django мы называем такие файлы «статикой».
Для маленьких проектов это не является проблемой, так как вы можете просто разместить статичные файлы где-то на своём веб сервере. Однако, для больших проектов, особенно состоящих из множества приложений, взаимодействие с несколькими наборами статичных файлов, предоставляемых каждым приложением, начинает походить на работу фокусника.
Именно для решения этой задачи существует django.contrib.staticfiles. Он собирает статичные файлы из каждого вашего приложения (и из других мест, которые вы укажете) в единое место, которое может легко применяться на боевом сервере.
Где получить помощь:
При наличии проблем с данной инструкцией, пожалуйста, обратитесь к разделу FAQ Получение помощи.
Настройка вида вашего приложения¶
Сначала создайте каталог static в каталоге polls. Django будет искать статичные файлы в нём, аналогично тому как Django ищет шаблоны внутри polls/templates/.
Параметр конфигурации STATICFILES_FINDERS содержит список модулей, которые знают как получать статичные файлы из различных источников. Одним из стандартных является AppDirectoriesFinder, который ищет каталоги «static» в каждом зарегистрированном приложении, например, созданный нами каталог в polls. Интерфейс администратора использует аналогичную структуру каталогов для своих статичных файлов.
В директории static, которую вы только что создали, создайте еще одну директорию polls, а в ней создайте файл style.css. Таким образом, ваша таблица стилей должна быть расположена в polls/static/polls/style.css. AppDirectoriesFinder сканер статических файлов работает таким образом, что вы можете ссылаться на этот файл в Django как polls/style.css, очень похоже на то, как вы указываете пути к шаблонам.
Пространство имен для статических файлов
Аналогично шаблонам, мы можем просто размещать наши статичные файлы прямо в каталоге polls/static (не создавая ещё один каталог polls внутри), но это будет плохой идеей. Django выбирает первый найденный статичный файл с указанным именем и если другое приложение имеет статичный файл с таким же именем, Django не сможет понять какой именно был вам нужен. Нам надо явно указать Django нужный, а вложенный каталог даёт нам именованное пространство для этого. Следовательно, просто размещайте статичные файлы приложения внутри другого каталога с именем, как у приложения.
Разместите следующий код в файле стилей (polls/static/polls/style.css):
li a {
color: green;
}
Затем добавьте следующие строки в начало polls/templates/polls/index.html:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">
Шаблонный тег {% static %} генерирует абсолютный URL к статическим файлам.
Это все, что вам нужно для разработки.
Запустите сервер (или перезапустите его, если он уже запущен):
$ python manage.py runserver
...\> py manage.py runserver
Это всё, что вам требуется сделать. Перегрузите страницу http://localhost:8000/polls/ и вы должны увидеть, что ссылки опроса стали зелёными (стиль Django!). Это означает, что ваш файл стилей загрузился нормально.
Добавление фонового изображения¶
Next, we’ll create a subdirectory for images. Create an images subdirectory
in the polls/static/polls/ directory. Inside this directory, put an image
called background.gif. In other words, put your image in
polls/static/polls/images/background.gif.
Затем добавьте следующие строки в файл стилей (polls/static/polls/style.css):
body {
background: white url("images/background.gif") no-repeat;
}
Перегрузите страницу http://localhost:8000/polls/ и вы должны увидеть, что фоновое изображение появилось в нижнем правом углу экрана.
Предупреждение
Тег шаблона {% static %} недоступен для использования в статических файлах которые не сгенерированы Django, как ваша таблица стилей, к примеру. Поэтому вы должны всегда использовать относительные пути, чтобы связать статические файлы между собой, потому что тогда вы можете изменить STATIC_URL (используется тегом шаблона static для генерации URL) без необходимости менять пути в ваших статических файлах.
Это были основы. Для получения подробностей о настройках и другой информации обращайтесь к ЧаВо по статичным файлам и справочнику по статике. Выкладывание статичных файлов рассматривает вопросы использования статичных файлов на боевом сервере.
Ознакомившись с работой со статическими файлами, вы можете приступить к разделу 7, чтобы узнать как настроить интерфейс администратора Django.