Html Zope(ZPT)重叠标签
我尝试在Zope页面模板中创建一个打开的Html Zope(ZPT)重叠标签,html,zope,template-tal,zpt,template-metal,Html,Zope,Template Tal,Zpt,Template Metal,我尝试在Zope页面模板中创建一个打开的div标记条件,并在另一个条件下使用TAL关闭一个div标记,但不允许重叠标记 这是我的密码: <div id="notaccordion"> <tal:x repeat="item python:range(26)">
div
标记条件,并在另一个条件下使用TAL关闭一个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>
它返回/div
而不是
如果你想知道我为什么这么做。我需要显示一个树结构。因为我(认为我)不能递归地做它,所以我尝试使用后进先出列表来模拟它。current
是我的当前节点
我试图实现这一点(节点是dict of dict…用作树):
lifo=list()
后进先出。追加([node,False])
而后进先出:
当前,isDone=后进先出[-1]
block=current.keys()[0]
如果是isDone:
打印“
后进先出
其他:
后进先出[-1][1]=真
打印“
打印块
children=current[block].get('children',{})
如果是儿童:
对于childBlock,childValue在children.items()中:
追加([{childBlock:childValue},False])
任何帮助或建议都非常感谢页面模板必须是有效的XML,因此您不能随意地包含标签。最好递归处理树结构(可能使用宏片段):
-
元素id
例如,Plone navigation portlet还使用for-each-level,调用自身来呈现子级(recurse
是相同的模板)
对于使用open_div
或close_div
脚本的特定方法,需要防止自动HTML转义:
很好,
结构
关键字让它工作得很好。稍后我可能会使用你的宏。非常感谢。
<tal:x condition="python:isDone">
</div>
</tal:x>
Compilation failed
zope.tal.taldefs.TALError: TAL attributes on <tal:x> require explicit </tal:x>
<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>
print '</div>'
return printed
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])