Курсовая / подсказка к 2 задачке

Сейчас мы отдаем текст страницы сайта просто как результат функции. Что конечно здорово, но если представить, что у нас будет даже просто болванка под страницу со всеми этими html/head/body и прочими штуками писать очень быстро станет не интересно.

Специально для таких целей во flask реализовал механизм шаблонов. Как же это работает? Давайте создадим папку templates

теперь добавим в эту папку файлик index.html и загоним в него стандартную болванку текста с каким-нибудь текстом

если запустить сервер flask --app server --debug run и открыть ссылку http://127.0.0.1:5000 то увидим все тот же текст что и в прошлой подсказке

как же нам показать именно наш файлик? Для этого надо заставить шаблон отрендерить этот файлик. Для этого пишем в нашей функции hello_world

обновим теперь страницу в браузере. И проверим что появится:

о, теперь другое дело! =)

Создаем дополнительные страницы

Теперь можно попробовать сделать несколько страниц. Создадим файлики about.html и best_page.html

как же нам подключить их к серверу?

Для этого надо в файлике нашего сервера добавить две дополнительные функции под каждую страницу, вот так:

теперь если попробовать открывать ссылки http://127.0.0.1:5000/about и http://127.0.0.1:5000/best_page то откроется содержимое наших файлов. Собственно, то что мы и хотели.

Мы можем даже сделать подобие навигации. Добавив в каждый ссылки на другие страницы:

ну и все, красота, можно теперь переходить между страничками! =О

и тут вероятно возникает вопрос, а нафига мы все делали если все тоже самое можно реализовать без всяких python с его фласками, бери liveserver и пили?)

А вот сейчас и разберемся

Использование шаблонизатора Jinja2

Во flask интегрирован шаблонизатор jinja, который позволяет очень много всего делать с html страницами, а в частности собирать их из кусочков.

Давайте воспользуемся его возможностями!)

Выносим навигацию в подшаблон

Вот у нас сейчас навигация на всех страницах одинаковая. Давайте вынесем ее в отдельный файлик и подключим этот файлик. Я создам подпапку components в папке templates и добавлю в нее файлик _navigation.html

а в файлике index.html пишем так

то же самое делаем с остальными файлами, получится так

теперь если попробовать пооткрывать ссылки все будет работать также

но вы только гляньте сколько строк мы сэкономили! =)

Создаем болванку страницы

Далее глянем на наши страницы еще раз и увидим, что выглядят они не особо по разному.

В принципе можно было вынести, например, head в отдельный файл и тоже подключать его через include. Мы б так сэкономили бы еще кучу места.

Но у jinja есть кое-что получше.

Так называемый механизм наследования шаблонов.

Работает он следующим образом. Вы создаете новый html файлик и описываете шаблон, а в тех местах где должен быть уникальный контент вставляете специальную конструкцию block Пробуем. Создаем файлик __layout.html (у меня два нижних подчеркивания, будьте внимательны!), который выглядит как все остальные файлы, только на месте где у страниц потенциально может находится разный контент мы вставляем

{% block content %}{% endblock %}

вот так получается

Наследуем базовый шаблон

а теперь возьмем все наши файлики страниц и наследуем их от этого базового файла. А уникальный контент пропишем в block. Выглядит это так:

то есть теперь у наших файликов страниц в начале есть строчка

{% extends "__layout.html" %}

которая говорит, что данная страница будет иметь такую же размтеку как и __layout.html.

А вторая конструкция

{% block content %}
    тут у всех страниц свой текст
{% endblock %}

указывает что надо подставить на место {% block content %}{% endblock %} исходного шаблон __layout.html, таким образом мы получаем новый шаблон с уникальным содержимым! =)

Опять же если теперь проверить как оно работает, то работает все так же как и раньше

только больше не надо заниматься прописыванием повторяющихся частей.

Подключение бутстрапа

Мы можем даже подключить bootstrap в __layout.html. Просто добавив соответствующие стили и скрипты:

и он автоматически станет доступен на всех страницах.

Гляньте, как теперь выглядит внутри отрендеренный шаблон главной страницы

а вот ее исходный код

Сборку файлика из частей собственно и осуществляет компилятор jinja шаблонов.

Но вы только прикиньте насколько меньше надо писать кода! : )

Такие дела =)

2

Создаем многостраничный сайт с использованием шаблонизатора