| 
	| 
	
	| 
		
	| 
			
			 
			
				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
 |  |  |  |