我尝试在 Zope 页面模板中使用 TAL 创建打开div
标签条件并关闭div
另一个条件中的标签,但不允许重叠标签。
这是我的代码:
<div id="notaccordion">
<tal:x repeat="item python:range(26)">
<tal:x define="global block_name python:current.values()[0]['block_name']">
<tal:x condition="python:isDone">
</div>
</tal:x>
<tal:x condition="python:not isDone">
<tal:x replace="python:block_name">
</tal:x>
<div>
</tal:x>
</tal:x>
</tal:x>
</div>
重要的部分是:
<tal:x condition="python:isDone">
</div>
</tal:x>
这是错误。
Compilation failed
zope.tal.taldefs.TALError: TAL attributes on <tal:x> require explicit </tal:x>
我尝试使用 Python 脚本,但它也不起作用。
<div id="notaccordion">
<tal:x repeat="item python:range(26)">
<tal:x define="global block_name python:current.values()[0]['block_name']">
<tal:x condition="python:isDone">
<tal:x content="python:context[close_div]()">
</tal:x>
</tal:x>
<tal:x condition="python:not isDone">
<tal:x replace="python:block_name">
</tal:x>
<tal:x content="python:context[open_div]()">
</tal:x>
</tal:x>
</tal:x>
</tal:x>
</div>
使用close_div
脚本:
print '</div>'
return printed
它返回</div>
而不是</div>
如果你想知道我为什么这样做。我有一个需要显示的树结构。由于我(认为我)不能递归地执行此操作,因此我尝试使用 LIFO 列表来模拟它。并且current
是我当前的节点。
我试图实现这一点(节点是dict的dict ...用作树):
lifo = list()
lifo.append([node, False])
while lifo:
current, isDone = lifo[-1]
block = current.keys()[0]
if isDone:
print '</div>'
lifo.pop()
else:
lifo[-1][1] = True
print '<div>'
print block
children = current[block].get('children', {})
if children:
for childBlock, childValue in children.items():
lifo.append([{childBlock:childValue}, False])
任何帮助或建议表示赞赏