2011-06-29 12 views
2

これは複数形フィルタに関する私のprevious questionの一般化です:リフトのDjangoタグとフィルタ?

リフトにはDjangoのタグとフィルタに相当するものがありますか?

タグ例えばHTMLテンプレートに直接使用することができる事前定義されたコードの小片である:

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

は、所定のフォーマットで今時間をレンダリングします。

{{ value|capfirst }} 

値で呼び出された場合、「ジョン」は「ジョン」になります:

フィルタは、例えば、テンプレートのコンテキスト変数に(HTMLテンプレートに)動作

フィルタ。 Or:

{{ value|length }} 

は、文字列の長さをテンプレートにレンダリングします。

ご覧のとおり、フィルタはテンプレートに渡されるコンテキスト変数で動作します。

+0

設計上、Liftのhtmlテンプレートではコードは許可されていません。 –

+0

http://simply.liftweb.net/index-Chapter-3.html#toc-Chapter-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テンプレートとコードを分けて、使い慣れているとうまくいきます) Scalateであり、リフトと一緒に使用することもできる。

+0

うわー、クール、私はスカラートがスカリーの一部だったことは知らなかったし、すでにリフトに組み込まれている! – drozzy

+0

あなたはそれを自分で接続しなければならないでしょうし、それがどの程度文書化されているか分かりませんが、一般的にはうまくいくはずです。 – Debilski

+1

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

0

この種類のロジックは、スニペットのrenderメソッドである必要があります。純粋なScalaの表示コード(テンプレート言語のハイブリッドではなく)は、テスト、IDEおよびリファクタリングツールに関する一流の市民です。

変換のこれらの種類は、ビルトイン来ませんが、暗黙でそれらを追加することができます。

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

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

は、その後、それはあなたが作成しているでどのような値バインドする前に、あなたのrender方法でこれらを呼び出します。