1つの要素に複数のcssクラスを設定しようとしています。
残念ながら、これは機能しません。次のようになります。LanguageError: Duplicate attribute name in attributes.
<ul>
<li tal:repeat="item mainnav"
tal:attributes="class 'first' if repeat.item.start else nothing;
class 'last' if repeat.item.end else nothing;
class 'active' if item.active else nothing">
<a tal:attributes="href item.href" tal:content="item.title">title</a>
</li>
</ul>
これらの3つのケースを1つの式に組み合わせると、6つの異なるcss状態があるため、非常に複雑になります。
- 最初の+アクティブ
- 最初
- 最後+アクティブ
- 過去
- アクティブ
- (無し)
私が考えることができる2つの可能な解決策があります:
->各組み合わせをインラインで確認します。
<ul>
<li tal:repeat="item mainnav"
tal:attributes="
class 'first active' if (repeat.item.start and item.active) else
'first' if repeat.item.start else
'last active' if (repeat.item.end and item.active) else
'last' if repeat.item.end else
'active' if item.active else nothing">
<a tal:attributes="href item.href" tal:content="item.title">title</a>
</li>
</ul>
->結合されたcssクラスを返すメソッドを作成します
さて、より良いアプローチがありますか?そうでない場合は、これら2つのうちどちらが優れていますか(おそらく後者の方が、インラインスクリプトがより複雑になるかのように、読み取り不能/管理不能になります)。
ところで、についての良いリソースと例はありますかChameleon
(http://chameleon.repoze.org/docs/latestTALES
以外)