Написание первого приложения Django, часть 6
Это руководство начинается там, где закончилось Руководство 5. Мы создали протестированное веб-приложение для опросов, а теперь добавим таблицу стилей и изображение.
Помимо HTML-кода, который генерирует сервер, веб-приложениям обычно нужно предоставлять дополнительные файлы — например, изображения, JavaScript или CSS, — необходимые для отображения веб-страницы целиком. В Django мы называем эти файлы «статическими файлами».
Для небольших проектов это не представляет большой проблемы, поскольку статические файлы можно хранить в месте, доступном веб-серверу. Однако в более крупных проектах, особенно состоящих из нескольких приложений, работа с наборами статических файлов, предоставляемых каждым приложением, становится непростой задачей.
Для этого и предназначен django.contrib.staticfiles: он собирает статические файлы из каждого приложения (а также из любых других указанных вами мест) в одном месте, откуда их можно легко предоставлять в рабочей среде.
Где получить помощь:
Если у вас возникли трудности при прохождении этого руководства, перейдите к разделу Получение помощи в разделе часто задаваемых вопросов.
Настройка внешнего вида приложения
Для начала создайте каталог с именем static в каталоге polls. Django будет искать там статические файлы так же, как он ищет шаблоны в polls/templates/.
Настройка Django STATICFILES_FINDERS содержит список средств поиска, которые умеют находить статические файлы в различных источниках. Одно из средств поиска по умолчанию — AppDirectoriesFinder — ищет подкаталог «static» в каждом приложении из INSTALLED_APPS, например в только что созданном нами 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):
polls/static/polls/style.cssli a {
color: green;
}
Затем добавьте следующий код в начало файла polls/templates/polls/index.html:
polls/templates/polls/index.html{% load static %}
<link rel="stylesheet" href="{% static 'polls/style.css' %}">
Тег шаблона {% static %} создаёт абсолютный URL статических файлов.
Для разработки этого достаточно.
Запустите сервер (или перезапустите его, если он уже работает):
$ python manage.py runserver
...\> py manage.py runserver
Перезагрузите страницу http://localhost:8000/polls/. Ссылки на вопросы должны стать зелёными (в стиле Django!), а это означает, что таблица стилей загружена правильно.
Добавление фонового изображения
Теперь создадим подкаталог для изображений. Создайте подкаталог images в каталоге polls/static/polls/. Поместите в этот каталог любой файл изображения, который хотите использовать в качестве фона. Для этого руководства мы используем файл с именем background.png, полный путь к которому будет polls/static/polls/images/background.png.
Затем добавьте ссылку на изображение в таблицу стилей (polls/static/polls/style.css):
polls/static/polls/style.cssbody {
background: white url("images/background.png") no-repeat;
}
Перезагрузите страницу http://localhost:8000/polls/. В левом верхнем углу экрана должно появиться фоновое изображение.
Предупреждение
Тег шаблона {% static %} нельзя использовать в статических файлах, которые не генерируются Django, например в таблице стилей. Для ссылки на статические файлы друг из друга всегда используйте относительные пути. Тогда вы сможете изменить STATIC_URL (который тег шаблона static использует для создания URL) и не придётся менять множество путей в статических файлах.
Это основы. Дополнительные сведения о настройках и других возможностях фреймворка см. в руководстве по статическим файлам и справочнике по staticfiles. В разделе Развёртывание статических файлов рассказывается, как использовать статические файлы на настоящем сервере.
Когда освоитесь со статическими файлами, прочитайте часть 7 этого руководства, чтобы узнать, как настраивать автоматически создаваемый сайт администрирования Django.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/intro/tutorial06/