Templates 如何使用Tale为tal:attributes中的同一属性设置多个值
我试图在一个元素上设置多个css类 不幸的是,这不起作用,因为它返回:Templates 如何使用Tale为tal:attributes中的同一属性设置多个值,templates,chameleon,template-tal,Templates,Chameleon,Template Tal,我试图在一个元素上设置多个css类 不幸的是,这不起作用,因为它返回:LanguageError:属性中的属性名称重复。 <ul> <li tal:repeat="item mainnav" tal:attributes="class 'first' if repeat.item.start else nothing; class 'last' if repeat.item.end else nothin
LanguageError:属性中的属性名称重复。
<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种情况合并到一个表达式中会使其变得非常复杂,因为有6种不同的css状态:
- 第一+主动
- 首先
- 最后+活动
- 最后
- 活跃的
- (无)
<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类的方法
现在,有更好的方法吗?如果没有,那两种方法中哪一种更好(可能是后一种,因为如果内联脚本变得更复杂,那么它将变得不可读/不可管理)
顺便说一句,关于变色龙、故事有什么好的参考资料和例子吗。我不喜欢过度嵌套的条件句,让你无从下手。 还没有测试过这个,但你可能会有这个想法
<ul>
<tal:myloop tal:repeat="item mainnav">
<li tal:condition="item.active" tal:attributes="class
'active first' if repeat.item.start
else 'active last' if repeat.item.end
else 'active'">
<a tal:attribute="href item.href" tal:content="item.title"></a>
</li>
<li tal:condition="not item.active" tal:attributes="class
'first' if repeat.item.start
else 'last' if repeat.item.end else None">
<a tal:attribute="href item.href" tal:content="item.title"></a>
</li>
</tal:myloop>
</ul>
-
-
您可以多次使用tal:define
定义类字符串的各个部分,然后从这些部分构造实际属性:
这可能导致类属性为空,这是无害的
至于其他文件;Chameleon是的一个实现,最初是为Zope页面模板开发的。因此,您会发现很多关于后者的文档也适用于变色龙,只要您考虑到变色龙的默认模式是
python:
,而ZPT默认为path:
。例如,Zope书的内容也适用于变色龙。在变色龙中,您可以执行以下操作:
<ul>
<li tal:repeat="item mainnav"
class="${'first' if repeat.item.start else ''}
${'last' if repeat.item.end else ''}
${'active' if item.active else ''">
<a tal:attributes="href item.href" tal:content="item.title">title</a>
</li>
</ul>
-
[编辑]
或者像这样更好:
<ul>
<li tal:repeat="item mainnav"
class="${('first ' if repeat.item.start else '') +
('last ' if repeat.item.end else '') +
('active' if item.active else '')}">
<a tal:attributes="href item.href" tal:content="item.title">title</a>
</li>
</ul>
-
关于这个问题,你有没有得到过一个好的答案,我还需要使用TAL将多个css样式附加到一个类中。对不起,没有。我最终切换到MAKO,甚至conisder,在不久的将来迁移到Jinja2。这似乎是一个麻烦的解决方案,因为你必须复制代码。如果有更多的可能性呢?我同意它是本可以解决我的问题,但必须有更好的解决方案?有效,但我必须在${…}
中直接使用项。
而不是像repeat.item.
中那样使用repeat
。