Я пытаюсь установить несколько классов 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:
- первый + активный
- первый
- последний + активный
- прошлой
- активный
- (никто)
Есть 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
Теперь, есть ли лучший подход, а если нет, то какой из этих двух лучше (вероятно, последний, так как если он усложнится, встроенный скрипт станет нечитаемым/неуправляемым).
Кстати, есть ли хорошие ресурсы и примеры по Chameleon
, TALES
(кроме http://chameleon.repoze.org/docs/latest)