4

我刚刚开始使用金字塔和变色龙模板。

我有以下呈现站点菜单的代码示例。

<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>

它通过不使其成为链接来突出显示当前页面菜单项。我正在尝试使用引导药丸导航。我需要有条件地将 class="active" 添加到<li>活动页面的标签中。

我尝试在<li>标签中添加 tal:condition:

 <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

完成我需要的最佳方法是什么。

4

1 回答 1

7

条件在repeat之前执行;您通常会嵌套语句以将条件放在重复中包含的标签上。但是,要放置条件属性,请tal:attributes改用:

<li tal:repeat="menu view.site_menu" tal:attributes="class 'active' if menu.current else None">
    <a href="/${menu.href}">${menu.title}</a>
</li>

将属性设置为None将其从标签中删除。

于 2013-11-24T13:52:01.593 回答