Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Zope(ZPT)重叠标签_Html_Zope_Template Tal_Zpt_Template Metal - Fatal编程技术网

Html Zope(ZPT)重叠标签

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

我尝试在Zope页面模板中创建一个打开的
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])