Цитата:
Jade - это LESS, т.е. примитивная шаблонка SS - это Stylus, т.е. полноценный язык для генерации шаблонов Какое то подробное сравнение - тема отдельной статьи, которую я наверное и напишу, но сейчас у меня другие приоритеты. Цитата:
contents.ss - namespace [%fileName%] - include 'posts/*' - template main() - forEach posts => post /// A тут уже делаем всё, что нам нужно |
...и кстати, не холивара ради, а потому что коль уж здесь любители шаблонов собрались...
> вдохновился от Django Templates для Python У меня есть четкое мнение (это всего лишь одно из всех мнений), что Django Templates - это полная хрень. С одной стороны, он делает из пользователя идиота. Не позволяет даже объявить переменную в шаблоне например, в общем там куча ограничений. Типа это философия такая - типа верстала не должен иметь возможности накосячить. Типа верстала не сильно шарит в шаблонном движке. Но эта философия уже давно протухла и воняет. Современный верстала должен не просто шарить в шаблонном движке, а обязан быть гуру шаблонного движка, иначе - *вон из професси*. При всем при этом если нужен шаг в сторону - лезь либо в templatetags, либо во view. А верстала туда лазить не должен! Но самое мать его веселое - это доступ к ORM. {% for post in posts %} <h1>{{ post.name </h1> <p>{{ post.date }}</p> {% endfor %} пока все хорошо. А теперь нужно добавить user.reg_date {% for post in posts %} <h1>{{ post.name </h1> <p>{{ post.date }}</p> <span>{{ post.user.reg_date }}</span> {% endfor %} Опа, и вот у нас уже 50 лишних запросов к базе. Это сделал верстала. (И это вообще лайтовый пример.) А должно быть вот как: (Верстала): программер, мне в постах еще юзеры теперь нужны (Программер): понял, добавлю (и уже там select_related и все дела) Конечно проблема с доступом к ORM - это скорее проблема уровнем повыше, чем особенность шаблонодвижка, но наглядно демонстрирует всю ущербность подхода. Сейчас Django нативно поддерживает Jinja2, и оно лучше. Jade было бы еще лучше (к сожалению с сабжем пока не знаком), но увы. ...Это все просто мысли. 2all: Как, согласны? |
Цитата:
|
> Если коротко - всем
Браво :D *Скромность украшает мужчину, но настоящий мужчина не нуждается в приукрашивании!* > Какое то подробное сравнение - тема отдельной статьи, которую я наверное и напишу, но сейчас у меня другие приоритеты. Интересно, буду ждать. > contents.ss А вот это уже интересно. Реально куль. Но проблема в другом - как данные ИЗ_ШАБЛОНА вытащить В_УПРАВЛЯЮЩИЙ_СКРИПТ? Так как в примере - проблема сильно ближе к решению. А можно на выходе JSON получить? SS - это вообще чисто html-движок (как Jade), или движок общего назначения (как Django Templates)? |
> То, что я вдохновлялся больше 3-х лет назад чем то, не значит, что оно сейчас так и т.д.
ну я это не с целью наезда, а скорее обсудить проблему. Типа > потому что коль уж здесь любители шаблонов собрались... |
Цитата:
Цитата:
Допустим у нас есть папка posts, там мы будем хранить наши посты, и для группировки засуним их в один родительский немспейс posts. posts/ posts/foo.ss - namespace posts[%fileName%] /// тоже самое, что и написать явно posts.foo /// Главный шаблон назовём main, он содержит основной пост - template main() < .hello Hello world! /// А это шаблон с превью статьи - template preview() Hello! Теперь создадим файл с содержанием, который будет выводить тексты превью contents.ss - namespace contents - include 'posts/*' /// Подключаем по маске все файлы из папки posts - template main() /// Т.к. все посты у нас лежат в неймспейсе posts, то просто делаем обход этого объекта - forEach posts => post += post.preview() /// Вызываем шаблон превею и выводим его текст Цитата:
Цитата:
- namespace myMd /// Здесь будем использовать вариант синтаксиса без управляющих пробелов, для более удобной генерации /// И также включим режим "терпимости к пробелам", чтобы сохранить структуру пробелов, т.к. мы генерируем md {template index(data) @= tolerateWhitespaces true} # Hello world {forEach data => el} * {el} {/} {/template} |
> В SS нет такой проблемы, потому что здесь иная философия.
у меня конкретный юзкейс > += post.preview() /// Вызываем шаблон превею и выводим его текст Мне оно так не надо, мне надо конкретно - 1) галпом разобрать шаблоны постов, получить структуриированные данные из них 2) засунуть все как мне надо в json, сжать его и положить куда надо в папке билда Между п. 1 и 2 должен стоять контроллер, которому вообще по барабану, какой там шаблонодвижок. Он должен получить данные из п. 1 и с ними уже делать что угодно. |
Цитата:
- namespace contents - include 'posts/*' - template main() - var contents = [] - forEach posts => post ? contents.push({preview: post.preview(), content: post.main()}) /// Т.к. у нас результатом шаблона будет JSON, то убираем html экранирование {contents|json|!html} |
> В Jade шаблоном является сам файл, а в SS для декларации шаблонов используется специальная директива template (по духу близкая к class в JS), т.е. в одном файле может быть много шаблонов, у шаблонов могут быть методы, шаблоны могут наследоваться от других шаблонов и т.д. В этом главное отличии SS от большинства других шаблонов
А вот это богато, базара нет. То есть мы получаем дополнительную степень свободы, потому что мы больше не привязаны к семантике файловой системы, и можем строить собственную семантику отношений шаблонов, при этом используя ФС как нам удобно, так чтоли? |
Цитата:
var foo = 1; function bar(a) { return a + foo; } - var foo = 1 - template bar(a) {a + foo} Кстати результатом работы шаблонов SS может быть не только строка, а что угодно, например можно сказать СС собрать DocumentFragment из шаблона. /// Вернёт <div class="hello"></div> - template foo() < .hello /// Вернёт DocumentFragment - template bar() @= renderMode 'dom' < .hello |
Часовой пояс GMT +3, время: 17:04. |