Я только начинаю с шаблонов пирамиды и хамелеона.Как условно добавить класс в элемент блока внутри цикла повтора с Chameleon
У меня есть следующий пример кода, который отображает меню сайта.
<li tal:repeat="menu view.site_menu">
<tal:block tal:condition="menu.current">
<span>${menu.title}</span>
</tal:block>
<tal:block tal:condition="not menu.current">
<span><a href="/${menu.href}">${menu.title}</a></span>
</tal:block>
</li>
Он выделяет пункт меню текущей страницы, не делая его ссылкой. Я пытаюсь использовать навигацию на основе бутстрапа. Мне нужно условно добавить класс = "active" в тег <li>
активной страницы.
Я попытался добавить Таля: условие к <li>
тегу:
<li tal:repeat="menu view.site_menu" tal:condition="menu.current" class="active">
<a href="/${menu.href}">${menu.title}</a>
</li>
, но я получаю следующее сообщение об ошибке:
builtins.NameError
NameError: menu
- Expression: "menu.current"
- Filename: H:\eta\eta\eta\templates\global_layout.pt
- Location: (line 38: col 57)
- Source: ... .site_menu" tal:condition="menu.current" class="active">
^^^^^^^^^^^^
Моя догадка здесь является то, что menu
доступен только внутри теги tal:repeat
.
Каков наилучший способ выполнить то, что мне нужно.
Работает отлично. У меня есть один вопрос. Поскольку я понимаю доки, это заменит атрибут. Есть ли способ добавить класс (оставив существующие классы неповрежденными)? Примечание: сегодня это не проблема, но я могу увидеть, где я могу столкнуться с этим в будущем. Я думаю о какой-то конструкции, похожей на 'class = class + 'someclass'' – cstrutton
Обычно я просто перечисляю классы в' tal: attributes'; вы не можете ссылаться на исходное значение в теге из 'tal: attributes'. Вы * можете * задавать вещи по умолчанию, но это контрольное значение, вы не можете использовать его в конкатенации строк, например. –
Понял ... еще раз спасибо. – cstrutton