Цитата:
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, время: 14:42. |