10.02.2016, 19:21
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
И все же, конкретно, можно основные преимущества перед Jade озвучить (пытался искать по Jade в топике - не нашел)?
|
Если коротко - всем. SS содержит разительно более мощные средства для повторного использования кода, средства локализации, универсальные средства интеграции с другими шаблонными движками (например для генерации шаблонов для Angular или React).
Jade - это LESS, т.е. примитивная шаблонка
SS - это Stylus, т.е. полноценный язык для генерации шаблонов
Какое то подробное сравнение - тема отдельной статьи, которую я наверное и напишу, но сейчас у меня другие приоритеты.
Цитата:
|
Особо интересует - решена ли эта проблема? Шаблон Jade как источник структурированных данных
|
Это не проблема для SS.
contents.ss
- namespace [%fileName%]
- include 'posts/*'
- template main()
- forEach posts => post
/// A тут уже делаем всё, что нам нужно
Последний раз редактировалось kobezzza, 10.02.2016 в 19:25.
|
|
10.02.2016, 19:25
|
Аспирант
|
|
Регистрация: 15.12.2015
Сообщений: 83
|
|
...и кстати, не холивара ради, а потому что коль уж здесь любители шаблонов собрались...
> вдохновился от 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: Как, согласны?
|
|
10.02.2016, 19:28
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
У меня есть четкое мнение (это всего лишь одно из всех мнений), что Django Templates - это полная хрень.
|
То, что я вдохновлялся больше 3-х лет назад чем то, не значит, что оно сейчас так и т.д. При разработке SS учитывался 10+ летний опыт разработки с огромном количеством шаблонных движков.
|
|
10.02.2016, 19:36
|
Аспирант
|
|
Регистрация: 15.12.2015
Сообщений: 83
|
|
> Если коротко - всем
Браво *Скромность украшает мужчину, но настоящий мужчина не нуждается в приукрашивании!*
> Какое то подробное сравнение - тема отдельной статьи, которую я наверное и напишу, но сейчас у меня другие приоритеты.
Интересно, буду ждать.
> contents.ss
А вот это уже интересно. Реально куль.
Но проблема в другом - как данные ИЗ_ШАБЛОНА вытащить В_УПРАВЛЯЮЩИЙ_СКРИПТ?
Так как в примере - проблема сильно ближе к решению. А можно на выходе JSON получить? SS - это вообще чисто html-движок (как Jade), или движок общего назначения (как Django Templates)?
|
|
10.02.2016, 19:39
|
Аспирант
|
|
Регистрация: 15.12.2015
Сообщений: 83
|
|
> То, что я вдохновлялся больше 3-х лет назад чем то, не значит, что оно сейчас так и т.д.
ну я это не с целью наезда, а скорее обсудить проблему. Типа
> потому что коль уж здесь любители шаблонов собрались...
|
|
10.02.2016, 19:48
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Браво *Скромность украшает мужчину, но настоящий мужчина не нуждается в приукрашивании!*
|
Именно так Просто сейчас я работаю над документацией к новой 7-й версии и на это реально уходит очень много сил. Как закончу - то там всё будет.
Цитата:
|
Но проблема в другом - как данные ИЗ_ШАБЛОНА вытащить В_УПРАВЛЯЮЩИЙ_СКРИПТ?
|
В SS нет такой проблемы, потому что здесь иная философия. В Jade шаблоном является сам файл, а в SS для декларации шаблонов используется специальная директива template (по духу близкая к class в JS), т.е. в одном файле может быть много шаблонов, у шаблонов могут быть методы, шаблоны могут наследоваться от других шаблонов и т.д. В этом главное отличии SS от большинства других шаблонов, SS выступает в роли транслируемого языка в JS, а не шаблонного движка.
Допустим у нас есть папка 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() /// Вызываем шаблон превею и выводим его текст
Цитата:
|
А можно на выходе JSON получить?
|
Конечно.
Цитата:
|
или движок общего назначения
|
Генерить можно любой текст, но для XML есть специальные директивы и фичи. Например я также использую SS для генерации MD файлов.
- namespace myMd
/// Здесь будем использовать вариант синтаксиса без управляющих пробелов, для более удобной генерации
/// И также включим режим "терпимости к пробелам", чтобы сохранить структуру пробелов, т.к. мы генерируем md
{template index(data) @= tolerateWhitespaces true}
# Hello world
{forEach data => el}
* {el}
{/}
{/template}
Последний раз редактировалось kobezzza, 10.02.2016 в 19:56.
|
|
10.02.2016, 19:57
|
Аспирант
|
|
Регистрация: 15.12.2015
Сообщений: 83
|
|
> В SS нет такой проблемы, потому что здесь иная философия.
у меня конкретный юзкейс
> += post.preview() /// Вызываем шаблон превею и выводим его текст
Мне оно так не надо, мне надо конкретно -
1) галпом разобрать шаблоны постов, получить структуриированные данные из них
2) засунуть все как мне надо в json, сжать его и положить куда надо в папке билда
Между п. 1 и 2 должен стоять контроллер, которому вообще по барабану, какой там шаблонодвижок. Он должен получить данные из п. 1 и с ними уже делать что угодно.
|
|
10.02.2016, 20:02
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
засунуть все как мне надо в json, сжать его и положить куда надо в папке билда
|
- namespace contents
- include 'posts/*'
- template main()
- var contents = []
- forEach posts => post
? contents.push({preview: post.preview(), content: post.main()})
/// Т.к. у нас результатом шаблона будет JSON, то убираем html экранирование
{contents|json|!html}
|
|
10.02.2016, 20:02
|
Аспирант
|
|
Регистрация: 15.12.2015
Сообщений: 83
|
|
> В Jade шаблоном является сам файл, а в SS для декларации шаблонов используется специальная директива template (по духу близкая к class в JS), т.е. в одном файле может быть много шаблонов, у шаблонов могут быть методы, шаблоны могут наследоваться от других шаблонов и т.д. В этом главное отличии SS от большинства других шаблонов
А вот это богато, базара нет.
То есть мы получаем дополнительную степень свободы, потому что мы больше не привязаны к семантике файловой системы, и можем строить собственную семантику отношений шаблонов, при этом используя ФС как нам удобно, так чтоли?
|
|
10.02.2016, 20:06
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
То есть мы получаем дополнительную степень свободы, потому что мы больше не привязаны к семантике файловой системы, и можем строить собственную семантику отношений шаблонов, при этом используя ФС как нам удобно, так чтоли?
|
Ну и это тоже конечно. А вообще лучше всего к СС относится через призму JS.
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
|
|
|
|