Немає задуму благороднішого, аніж викласти сотню-другу кілобайт HTML-у для анонімуса. То ж ніщо не повинно стримувати вебмайстра у його благородному пориві. Звичайно, у доброго газди вже є Django, що мегабайтами лиє добро в інтернети на заздрість усім ворогам. Досягаємо на білий світ Handlebars і напильник. До пари би ще здалося python-spidermonkey
і pyinotify
, аби manage.py compilehandlebars
збирав усе до купи і радував, а як немає, то й не біда.
Отож, повтиравши руки і притягнувши консоль ближче, рушаймо:
- Досягаємо. Все як завжди,
pip install django-handlebars
абоpython setup.py install
- Прикручуємо. Додаємо
django_handlebars
доsettings.INSTALLED_APPS
- Підточуємо. Об’являємо в
settings.py
змінніHANDLEBARS_*
по зразку django_handlebars.appsettings - Перевіряємо.
./manage.py test django_handlebars
- Радуймося і співаймо.
Кожен правовірний девелопер знає, що день треба починати з доброї кави, а темплейти з {% load %}
{% load handlebars_tags %} <html> <head> {% handlebars_scripts %} </head> <body></body> </html>
Чуда не обіцяю, але на сторінці з’явиться пара тегів script
. Перший — handlebars.js
, або handlebars.runtime.js
, якщо темплейти вже скомпільовані і settings.HANDLEBARS_COMPILED = True
. Інший — handlebars.django.js
, котрий додасть метод Handlebars.tpl()
для завантаження і читання темплейтів.
Так простіше і швидше, підійде для початку. Проте, темплейти компілюються щоразу заново, і лишній десяток кілобайт парсера на кожній сторінці гнітить девелоперську душу прагнучу досконалості. Переконавшись, що *.html
темплейт доступний зі статичного URL-а, пишемо:
var data = {title: "The title", body: "whatever"} Handlebars.tpl("your/template/spec", { success: function(renderer){ console.log("Дивіться, куме, як гарно:", renderer(data)); }, error: function(xhr, err){ console.warn("Холєра ясна, can't load the template", err); } });
що завантажить темплейт з http://domain.com/ + settings.HANDLEBARS_TPL_URL + path/to/template + .html
. Повторний виклик поверне темплейт з кешу (не того, котрий готівка, заначка в безпеці).
Якщо доступний jQuery, то Handlebars.tpl()
поверне jQuery.Deferred:
var df = Handlebars.tpl("your/template/spec"); df.done(function(renderer){ console.log("Краса смерекова:", renderer(data)); }).fail(function(xhr, err){ console.warn("Аби тебе дідько вхопив:", err); });
Якщо ж немає, то все загрузиться дідівським XHR-ом, скромно і без музики.
Якщо відмінити пиво і потратити ввечері годинку-другу на читання доків та інсталяцію всіх модулів, то світле майбутнє стане значно ближчим. Код залишається тим же, але темплейти будуть завантажуватись з http://domain.com/ + settings.HANDLEBARS_TPL_CMPURL + path/to/template + .js
В обох випадках маємо HTTP-запит, котрого можна позбутись, передбачливо склавши темплейти в кеш на етапі генерації сторінки:
{% handlebars_template "your/template/spec" %}
Тег додасть на сторінку <script>Handlebars.tpl("your/template/spec", tpl)</script>
, де tpl — скомпільований, або сирий темплейт.
Повертаємось до консольки:
./manage.py compilehandlebars --help --clean Remove all previously compiled templates --watch Watch for changes within appsettings.TPL_DIR and compile --raw Do not format output --quiet Run with no output
Copyright 2012 Sergii Iavorskyi, Licensed new-style BSD. Contains Handlebars.js copyright 2011 Yehuda Katz. See LICENSE file for more information.