Теги и фильтры Django в лифте? - PullRequest
2 голосов
/ 29 июня 2011

Это обобщение моего предыдущего вопроса о множественном фильтре:

Имеет ли лифт эквивалент тегов и фильтров Django?

Теги это небольшой фрагмент предопределенного кода, который можно использовать непосредственно в html-шаблоне, например:

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

отображает время прямо в данном формате.

Фильтры

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

{{ value|capfirst }}

при вызове значения "john" приведет к "John".Или:

{{ value|length }}

отобразит длину строки в шаблон.

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

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

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

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

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

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

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

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

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

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

0 голосов
/ 29 июня 2011

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

Эти виды преобразований не встроены, номожете добавить их с имплицитами:

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

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

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

...