Я пытаюсь установить несколько классов 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>
Объединение этих трех случаев водно выражение делает его довольно сложным, потому что есть 6 различных состояний css :
- first + active
- first
- last + active
- последний
- активный
- (нет)
Существует 2 возможных решения, о которых я могу подумать:
->проверьте каждую комбинацию inline:
<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
, TALES
(кроме http://chameleon.repoze.org/docs/latest)