gpt4 book ai didi

html - Zope (ZPT) 重叠标签

转载 作者:行者123 更新时间:2023-11-28 01:57:40 26 4
gpt4 key购买 nike

我尝试创建一个开放的 div标记条件并关闭 div在 Zope 页面模板中使用 TAL 在另一种情况下标记,但我不允许重叠标记。

这是我的代码:

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

感谢任何帮助或建议

最佳答案

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

<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 转义:

<tal:x content="structure python:context[open_div]()">

关于html - Zope (ZPT) 重叠标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com