2011-06-29 2 views
2

Это обобщение моего previous question о плюрализации фильтра:Джанго-теги и фильтры в лифте?

Есть ли у лифта эквивалент тегов и фильтров Django?

Метки являются небольшой кусок предопределенного кода, который может быть использован непосредственно в шаблоне HTML, например:

{% now "jS F Y H:i" %} 

оказывает время прямо сейчас в данном формате.

Фильтры

Фильтры работают (в шаблоне HTML) на контекстном переменных в шаблоне, например:

{{ value|capfirst }} 

при вызове по значению «джон» приведет к «Джону» , Или:

{{ value|length }} 

будет отображать длину строки в шаблоне.

Как вы можете видеть, фильтры работают с переменными контекста, которые передаются в шаблон.

+0

По дизайну на html-шаблонах в лифте не допускается использование кода. –

+0

Пожалуйста, прочтите http://simply.liftweb.net/index-Chapter-3.html#toc-Chapter-3. Если у вас есть вопросы о лифте, пожалуйста, задайте их в списке рассылки Lift или, по крайней мере, посмотрите вопросы, заданные ранее в списке рассылки Lift –

+1

Я читал, что * книга уже 10 раз! Я не думаю, что я получу что-нибудь еще. Вопрос о тегах был просто для полноты - поскольку меня действительно интересуют фильтры. – drozzy

ответ

2

Учитывая теги, вы можете определить их самостоятельно с помощью фрагментов.

Как фрагмент в основном обратный вызов, так же как и тег Django. Однако вы не получаете более простой синтаксис, потому что шаблоны Lift - это чистый XML/Html.

<Lift:Tag.now format="jS F Y H:i" /> 

И логика будет определена в

class Tag { 
    def now: NodeSeq = // ... 
} 

Фильтрация то, что вы вообще не можете сделать в шаблоне Lift, потому что лифт не допускает каких-либо переменных в шаблоне. Таким образом, вся концепция неприменима. (Вы мог сделать XML трансформирует или или связывание магии, но это было бы слишком много для простого value.length.)

Нет, если вам нужна длина некоторого значения в вашем HTML, вы должны определить, что внутри фрагмента и разоблачить его.

Если вы действительно не можете жить без фильтров в своем шаблоне (хотя я могу заверить вас, что это хорошо, чтобы отделить все HTML-шаблон и код, и он работает, когда вы к нему привыкли), посмотрите Scalate, которые могут использоваться вместе с лифтом.

+0

Ничего себе, круто, я не знал, что Scalate был частью scala и уже интегрирован в Lift! – drozzy

+0

Вам придется подключить его самостоятельно, и я не уверен, насколько хорошо он задокументирован, но в целом он должен работать. – Debilski

+1

https://github.com/lift/examples/tree/master/nuggets/helloscalate – Debilski

0

Этот тип логики должен быть в методе render фрагмента. Отображаемый код в чистом Scala (а не в гибриде шаблонов) является первоклассным гражданином в отношении тестирования, инструментов IDE и рефакторинга.

Такие преобразования не приходят встроенные, но вы можете добавить их с implicits:

class HappyString(s: String) { 
    def capfirst = .... 
} 

implicit def toHappyString(s: String) = new HappyString(s) 

Затем вызовите их в методе render перед переплетом любое значение, то вы генерируете.

Смежные вопросы