2

Zope Page Template で 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

&lt;/div&gt;代わりに返します</div>

なぜ私がそれをしているのだろうか。表示する必要があるツリー構造があります。私は(私が思うに)再帰的にそれを行うことができないので、LIFO リストを使用してエミュレートしようとします。そしてcurrent、私の現在のノードです。

私はこれを達成しようとします(ノードは辞書の辞書です...ツリーとして使用されます):

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

どんな助けや提案も大歓迎です

4

1 に答える 1