Туториал по Jinja2
Jinja2 — это инструмент для html-шаблонизации. Он позволяет подставлять переменные из Python прямо на странички в браузере.
Вот как это работает:
1. Создайте файл
Создайте файл template.html с таким содержимым — это вёрстка сайта, с ней будем работать в туториале.
2. Откройте сайт в браузере
Если вы работаете с файлом на своём компьютере, то посмотреть сайт можно кликнув по файлу template.html, выберите в контекстном меню пункт “Открыть в браузере”.
Попробуйте открыть сайт, с вашим template.html. Не забудьте дописать название файла в адресной строке. Выглядеть он будет так:
3. Вставьте в шаблон места для переменных
Места для переменных отмечаются двумя фигурными скобочками {{ }}, внутри которых названия переменных. В блоке кода ниже мы создали места для переменных cap1_title и cap1_text для первой кепки, cap2_title и cap2_text для второй и так далее:
<div class="card-body">
<h5 class="card-title">{{cap1_title}}</h5>
<p class="card-text">{{cap1_text}}</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
...
<div class="card-body">
<h5 class="card-title">{{cap2_title}}</h5>
<p class="card-text">{{cap2_text}}</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
...
Если теперь открыть сайт в браузере, то выглядеть он будет странно. Это нормально, не переживайте:
4. Установите Jinja2
Установить Jinja2 можно командой `pip install Jinja2.
5. Запустите скрипт
Мы подготовили для вас готовый скрипт main.py. Скачайте его.
Запустите скрипт командой python main.py.
У вас появится новый файл index.html, в котором переменные cap1_title заменится на Красная кепка, а cap1_text заменится на $ 100.00.
Теперь сайт выглядит так:
Как это работает
Первые пара строк отвечают за то, чтобы Python-скрипт нашёл HTML-шаблон:
env = Environment(
loader=FileSystemLoader('.'),
autoescape=select_autoescape(['html'])
)
template = env.get_template('template.html')
Разберем построчно что здесь написано.
loader=FileSystemLoader('.') — тут говорится о том, что файл шаблона template.html нужно искать в том же каталоге, где лежит скрипт main.py. Точка — это так в программировании обозначается “текущая папка”.
autoescape=select_autoescape(['html']) — это стандартные настройки для работы с HTML. Можно это пропустить. Если интересно, то читайте подробно здесь.
template = env.get_template('template.html') — в переменную template загружается шаблон из файла template.html.
Следующие строчки кода:
rendered_page = template.render(
cap1_title="Красная кепка",
cap1_text="$ 100.00",
cap2_title="Чёрная кепка",
cap2_text="$ 120.00",
cap3_title="Ещё одна чёрная кепка",
cap3_text="$ 90.00",
)
Из них Jinja2 подхватила значения аргументов и подставила их в шаблон: на место, где было написано {{cap1_title}} подставилось значение аргумента cap1_title="Красная кепка".
Новый HTML, в котором значения подставлены, теперь лежит в переменной rendered_page. Это обычная строка текста.
Далее строка с HTML сохраняется в файл с именем index.html:
with open('index.html', 'w', encoding="utf8") as file:
file.write(rendered_page)
Последние строчки кода запускают веб-сервер:
server = HTTPServer(('0.0.0.0', 8000), SimpleHTTPRequestHandler)
server.serve_forever()
Обратите внимание, что функция serve_forever будет работать вечно. Об этом недвусмысленно сообщает её название serve forever, и это надо учитывать при написании программы. Не помещайте никакой код следом за вызовом serve_forever() — он никогда не будет запущен.