Перейдите к следующему слайду, нажав кнопку Вправо
Учимся работать с библиотекой livereload в Python
Подготовлено онлайн-курсом
from livereload import Server, shell
server = Server()
server.watch('docs/*.rst', shell('make html', cwd='docs'))
server.serve(root='docs/_build/html')
Разбор примера из документации
1. Создали сервер. Он ответит на запросы браузера и отдаст ему файлы.
Файл server.py
$ python server.py
[I 200201 18:43:42 server:296] Serving on http://127.0.0.1:5500
[I 200201 18:43:42 handlers:62] Start watching changes
[I 200201 18:43:42 handlers:64] Start detecting changes
Запуск скрипта server.py
2. Даём команду следить за изменениями в файлах и после каждого изменения запускать консольную программу `make html` в каталоге `docs`.
3. Запускаем сервер. Функция будет работать вечно и код ниже этой строки никогда не запустится.
server.watch('docs/*.rst', shell('make html', cwd='docs'))
Как работает server.watch()
За чем следить. Можно указать файл, можно указать маску файлов. В данном случае библиотека следит за всеми файлами в папке docs/, у которых расширение .rst
Что делать, если что-то поменялось. Сюда передаётся функция без вызова (коллбек). Не смотрите, что в примере вызывается функция shell — она особенная и сама возвращает новую функцию.
def rebuild():
... # do things
print("Site rebuilt")
server.watch('myfile.txt', rebuild)
Следит за файлом myfile.txt
Как только файл поменялся, вызывает функцию rebuild(), которая пишет в терминал "Site rebuilded"
Как работает server.watch()
Вызова watch() недостаточно
def rebuild():
... # do things
print("Site rebuilt")
rebuild()
server.watch('template.html', rebuild)
Для изменений, сделанных до запуска скрипта
Для изменений после запуска скрипта
from livereload import Server, shell
server = Server()
server.watch('docs/*.rst', shell('make html', cwd='docs'))
server.serve(root='docs/_build/html')
Как работает server.serve()
Даём серверу команду брать файлы из папки, указанной в параметре root. Теперь при каждом запросе от браузера сервер будет искать файлы внутри каталога `docs/_build/html`.
server.serve(root='.')
А вот как раздать статику из текущей папки
Обратите внимание, что функция serve будет работать вечно, и это надо учитывать при написании программы. Не помещайте никакой код следом за вызовом serve() — он никогда не будет запущен.
Как работает server.serve()
Полный пример
from livereload import Server
def rebuild():
... # do things
print("Site rebuilt")
rebuild()
server = Server()
server.watch('template.html', rebuild)
server.serve(root='.')
$ livereload dist
Как раздать статику вообще без Python
Раздаёт статику из папки dist и следит за изменениями в ней.
Если вы только верстаете, вам не нужна шаблонизация, то можно не писать Python-скрипт для лайврелоада.
Достаточно положить index.html и прочие файлы в папку dist/ и запустить одну команду в терминале.
Сайт появится по адресу http://127.0.0.1:35729
Документация
Полная документация библиотеки livereload собрана здесь.
Создано для онлайн-курса https://dvmn.org