2011-06-29 74 views
2

這是我的previous question關於多元化過濾器的推廣:Django標籤和過濾器在Lift?

電梯是否具有相當於Django的標籤和過濾器?

標籤是小片的預定義代碼,可以直接在HTML模板中使用,例如:

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

呈現時間,現在在給定的格式。

過濾器

過濾器模板中的上下文變量操作(在HTML模板),例如:

{{ value|capfirst }} 

如果叫上一個值「約翰」將導致「約翰」 。或者:

{{ value|length }} 

會將字符串的長度呈現到模板中。

正如您所看到的,過濾器對傳遞給模板的上下文變量進行操作。

+0

按照設計,Lift中的html模板不允許有代碼。 –

+0

請閱讀http://simply.liftweb.net/index-Chapter-3.html#toc-第3章另外,如果您對Lift有任何疑問,請在Lift郵件列表上詢問他們,或者至少看看以前在Lift郵件列表 –

+1

上問過的問題我已經讀過10本書了!我不認爲我會從中得到更多的東西。關於標籤的問題僅僅是爲了完整 - 因爲我對濾鏡很感興趣。 – drozzy

回答

2

考慮到標籤,您可以使用片段自定義這些標籤。

由於片段基本上是一個回調,就像Django標籤一樣。儘管如此,您的語法並不簡單,因爲Lift的模板是純XML/Html。

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

和邏輯將在

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

定義過濾是你一般不能在電梯模板做的,因爲電梯不允許在模板中的任何變量。整個概念因此不適用。 (您可以做XML轉換或或綁定魔法但是這將是一個有點吃不消了一個簡單的value.length

不,如果你需要在你的HTML一些值的長度,你必須定義在代碼片段內部並將其公開。

如果你真的不能在你的模板中沒有過濾器(儘管我可以向你保證,分開所有的HTML模板和代碼是一件好事,而且一旦你習慣了它,它就會起作用),看看它也可以和Lift一起使用。

+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方法。