![Page 1: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/1.jpg)
ПРИВЕТ
![Page 2: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/2.jpg)
ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ
правда правда
![Page 3: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/3.jpg)
Я ТОЖЕно стараюсь
![Page 4: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/4.jpg)
ХВАЛЮ ЖИНЖУ• простая в использовании
• умеет больше
• быстрая
• без интерпретатора
![Page 5: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/5.jpg)
КАК ОНА РАБОТАЕТ
• парсит шаблон
• генерирует код
• компилирует
![Page 6: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/6.jpg)
РЕЗУЛЬТАТ - КОД НА ПИТОНЕ
![Page 7: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/7.jpg)
![Page 8: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/8.jpg)
![Page 9: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/9.jpg)
РУГАЮ ЖИНЖУ• не знает про html
• выводит через yield
• лишние name resolution (environment)
• context ??
![Page 10: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/10.jpg)
![Page 11: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/11.jpg)
ЗАВИДУЮ HAML
• понимает html
• лаконичный
• ruby, javascript
![Page 12: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/12.jpg)
А КАК ЖЕ Я?1. HamlPy = haml → django
2. mint - честный
3. PyHAML = haml → mako
![Page 13: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/13.jpg)
НАДО ЧТО-ТО ДЕЛАТЬ!
• тормоза - бесят
• конвертировать - скучно
• синтаксис минта - не нравится
![Page 14: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/14.jpg)
ПИШУ САМ
![Page 15: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/15.jpg)
ПИШУ САМ• привычный синтаксис
• высокая скорость
• минимальные усилия
![Page 16: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/16.jpg)
ПИШУ САМ• использую ast.parse
• генерирую код
• оптимизирую
![Page 17: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/17.jpg)
![Page 18: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/18.jpg)
![Page 19: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/19.jpg)
ДУМАЮ
![Page 20: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/20.jpg)
ОПТИМИЗИРУЮ
ast.NodeTransformer
![Page 21: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/21.jpg)
ОПТИМИЗИРУЮ
close_tag("table")
print("</table>")
![Page 22: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/22.jpg)
ОПТИМИЗИРУЮ
open_tag("table", {"class": "foo"})
print('<table class="foo">')
![Page 23: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/23.jpg)
ОПТИМИЗИРУЮopen_tag("td", {"name": name})
print('<td name="',
quoteattr(name),
'">')
![Page 24: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/24.jpg)
ОПТИМИЗИРУЮ
print('<tr>')
print('<td>')
print('<tr><td>')
![Page 25: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/25.jpg)
ОПТИМИЗИРУЮ
for i in [0, 1, 2]:
print(i)
print(0, 1, 2)
![Page 26: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/26.jpg)
ЧИСТЫЕ ФУНКЦИИпривет, хаскель
![Page 27: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/27.jpg)
ОПТИМИЗИРУЮ
print(escape("<foo"))
print("<foo")
![Page 28: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/28.jpg)
ОПТИМИЗИРУЮ
for i in range(3):
print(i)
print(0, 1, 2)
![Page 29: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/29.jpg)
ИНЛАЙНИНГпривет, си
![Page 30: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/30.jpg)
ОПТИМИЗИРУЮdef foo(i):
print(i)
foo(1)
print(1)
![Page 31: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/31.jpg)
ОПТИМИЗИРУЮ• считаю заранее
• инлайню функции
• разворачиваю циклы
• склеиваю строки
• list.append / list.extend
![Page 32: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/32.jpg)
![Page 33: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/33.jpg)
![Page 34: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/34.jpg)
HAMLYgithub.com/barbuza/hamly
![Page 35: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/35.jpg)
НАСКОЛЬКО БЫСТРО
mako jinja2 hamly
3732
7
mse
c
![Page 36: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/36.jpg)
ДУМАТЬ - ПОЛЕЗНО
![Page 37: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/37.jpg)
КАК НАУЧИТЬСЯ?
• elixir
• lisp (!)
• haskell (!!)
![Page 38: Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102710/54c5223d4a7959f8578b46cb/html5/thumbnails/38.jpg)
ВОТ И ВСЕ