Найти тему
Мысли вслух

Создание сайта в Python. Часть 4. Фронтенд. Работа с шаблонами на Django

Оформим внешний вид страницы нашего сайта. Продолжим разработку проекта MySite из предыдущей статьи.

1. Общая структура документа

1.1. В файле views.py приложения AppMySite импортируем два класса SitiesOfSiberia и SitiesOfEurope и в процедуре index_page для возвращаемой функции renderer указать контекст (данные) из этих классов через переменные data и data2. Переменной data присваиваются все объекты из класса SitiesOfSiberia, а data2 - все объекты из SitiesOfEurope.

Объявляем переменные баз данных для html
Объявляем переменные баз данных для html

1.2. В папке Temlpates изменим файл Index.html. В нём находится html код описывающий структуру документа. Для начала (1) заменим текст в заголовке h1 "Привет, Мир!" на "Города России" и (2) добавим два блочных элемента div со списком и его названием внутри. В каждом блоке название списка выводится в теге параграф p с текстом "Сибирь" для одного и "Европейская часть" для другого. После вывода текста в теге p следующий текст начинается с новой строки. Далее воспользуемся языком Templates Django для (3) вывода списков городов в цикле для каждого блочного элемента.

Код html выводящий на страницу города Сибири
Код html выводящий на страницу города Сибири
Обновлённый вид страницы
Обновлённый вид страницы

В скобках {% %} находится код языка Templates Django, а в скобках {{ }} находятся переменные, значения которых нужно вывести на экран. Для вывода списка городов из переменных data и data2 созданы два цикла {% for i in data %} {% endfor %}. В цикле переменной i по очереди присваиваются объекты из data для первого блочного элемента и из data2 - для второго. Объект содержит запись о городе из баз данных "Города Сибири" и "Города Европейской части". Между скобками цикла выводятся по очереди название {{i.nameOfSity}}, локация {{i.locationOfSity}} и численность {{i.sizeOfSity}} каждого города в строчку через пробел, который добавляется автоматически. Подробнее о языке Templates Django можно узнать на сайте разработчика. Тег br кода html начинает текст с новой строки, в которой будет выводится информация о следующем городе.

1.3. Для каждого цикла добавим: (1) нумерацию городов в списке; (2) надпись "Город" до его названия и запятую после; (3) запятую после локации; (4) надпись "человек" после указания численности города. Для номера используем счётчик циклов {{forloop.counter}}, а для дополнительных надписей и запятых используем тег для гиперссылки a, который без указания гиперссылки является обычным текстом.

Добавление счётчика циклов и различного дополнительного текста
Добавление счётчика циклов и различного дополнительного текста
Обновлённая страница сайта
Обновлённая страница сайта

2. Настройка стилей элементов

2.1. Во фреймворке Django для файлов стилей, скриптов и картинок необходима специальная папка static, которая указанна в settings.py.

Название папки для файлов стилей, скриптов и картинок в settings.py
Название папки для файлов стилей, скриптов и картинок в settings.py

Сервер ищет её в папке приложения AppMySite, поэтому через контекстное меню создаём её именно там. Для стилей нужно создать папку css в папке static. В папке css создадим файл styles.css для настройки стилей отображения элементов страницы. Выделив этот файл во вкладке EXPLORER бокового меню слева добавим в него настройки для отображения тегов body, h1, p и div.

Содержание файла настройки стилей
Содержание файла настройки стилей

Параметр background-color задаёт цвет фона элемента, color - цвет текста.

2.2. В Index.html в теге head укажем ссылку на этот файл styles.css используя тег link. В теге link для параметра href укажем команду {% static 'css/styles.css' %}. Обязательно написать команду {% load static %} в начале документа Index.html до <!DOCTYPE html> для загрузки всех статических элементов.

Подключение файла стилей к странице сайта
Подключение файла стилей к странице сайта
Внешний вид сайта
Внешний вид сайта

Вместо отдельного файла можно было добавить все стили в теге style в голове head, но это годится только для небольших сайтов.

3. Создание скриптов

3.1. Создадим в папке static папку скриптов js и в ней файл script.js. Откроем его в EXPLORER и добавим код для изменения цвета фона строки при наведении курсора.

Код JavaScript для смены цвета текста объекта
Код JavaScript для смены цвета текста объекта

При наведении курсора мыши на объект вызывается функция change_color_1 с аргументом id, номером ID тега для которого вызвана функция. В ней сохраняется цет текста до наведения в глобальной переменой color, после чего цвет текста меняется на "green" (зелёный). Доступ к цвету текста, который расположен в теге, получен через команду DOM модели html-разметки document.getElementById(id).style.color. В команде передан ID номер тега через переменную id. Когда курсор мыши выходит за границы объекта, вызывается функция change_color_2 с тем же аргументом id, что и change_color_1. Во второй функции тексту в теге возвращается исходный текст через команду document.getElementById(id).style.color упомянутую выше.

3.2. Загрузим описанный выше скрипт в нашу страницу через тег script в голове документа head. Адрес статического файла скрипта script.js задан аналогично css, через команду {% static 'js/script.js' %} языка Templates Django.

Загрузка скрипта в Index.html
Загрузка скрипта в Index.html

Как мы видим, в теге h1 и тегах p указаны их номера ID и вызываемая функция change_color_1 при наведении курсора мыши onmouseover, а также функция change_color_2 вызываемая при выходе курсора мыши за границы тега onmouseout.

Эффект от скрипта script.js и внешний вид сайта
Эффект от скрипта script.js и внешний вид сайта

По итогу четырёх последовательных частей статьи о создании сайта в Python на Django получили мини сайт из одной страницы с одним эффектом, но научились: (1) работать с базой данных, (2) автоматизировать пуск локального сервера, (3) работать с шаблонами, стилями и скриптами сайта. Теперь при добавлении городов в списки через админ-панель нет необходимости лезть в сам код блоков фреймворка Django, а также HTML/CSS/JS файлов при сохранении общего стиля и функциональности сайта.

Подписывайтесь на канал чтобы не пропустить новые статьи.

Наука
7 млн интересуются