首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zope (ZPT)重叠标签

Zope (ZPT)重叠标签
EN

Stack Overflow用户
提问于 2013-04-16 17:28:17
回答 1查看 448关注 0票数 2

我尝试在Zope Page模板中使用TAL创建一个打开的div标签条件,并在另一个条件中关闭一个div标签,但我不允许重叠标签。

下面是我的代码:

代码语言:javascript
复制
<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> 

重要的部分是:

代码语言:javascript
复制
            <tal:x condition="python:isDone">                                                                               
                </div>                                                                                  
            </tal:x>

这就是错误。

代码语言:javascript
复制
Compilation failed
zope.tal.taldefs.TALError: TAL attributes on <tal:x> require explicit </tal:x>

我尝试使用Python脚本,但也不起作用。

代码语言:javascript
复制
<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脚本:

代码语言:javascript
复制
print '</div>'
return printed

它返回&lt;/div&gt;而不是</div>

如果你想知道我为什么要这么做。我有一个需要显示的树结构。由于我(认为我)不能递归地执行它,所以我尝试使用后进先出列表来模拟它。current是我当前的节点。

我试图做到这一点(节点是字典的字典...用作树):

代码语言:javascript
复制
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])

如有任何帮助或建议,欢迎光临

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-16 17:50:31

页面模板必须是有效的XML,所以你不能随意地包含标签。最好以递归方式处理树结构(可能使用宏代码段):

代码语言:javascript
复制
<metal:recurse define-macro="list">
  <ul>
    <li tal:repeat="el elements">
      <span tal:content="el/id">element id</span>
      <metal:block tal:condition="el/children"
                   tal:define="elements el/children">
        <div metal:use-macro="template/macros/list" />
      </metal:recurse>
    </li>
  </ul>
</metal:recurse>

例如,Plone导航portlet也为每个级别使用一个separate macro template,调用它自己来呈现子级(recurse是相同的模板)。

对于使用open_divclose_div脚本的特定方法,您需要mark the content value as structure以防止发生自动HTML转义:

代码语言:javascript
复制
<tal:x content="structure python:context[open_div]()">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16033371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档