中的变色龙/TAL/ZPT模板问题tal:rep

2024-05-16 19:06:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为Python使用Chameleon模板(它基于zopetal/METAL语言)。此简单模板引发错误(dic是列表中的字典):

    <tr tal:repeat="dic myitems">
        <span tal:omit-tag="" tal:repeat="pair dic.items()">
            <td tal:content="pair[1 if dic.index else 0]"></td>
        </span>
    </tr>
AttributeError: 'dict' object has no attribute 'index'

 - Expression: "pair[1 if dic.index else 0]"
 - Filename:   <string>
 - Location:   (line 21: col 33)
 - Arguments:  repeat: {...} (0)
               dic: {...} (11)
               with_nginx_distribution: <list - at 0x7f30b34b20e0>
               pair: <tuple - at 0x7f30b36c7b90>
               css: \n.tabs {\n  position: relative;   \n  min-height: 20...
               target_language: <NoneType - at 0x7f30b46ade00>

我试过dic.indexdic.item.indexrepeat.indexrepeat.item.index但它们看起来都不对。访问循环项索引的正确语法是什么


Tags: 模板indexifitemelsetrattd
1条回答
网友
1楼 · 发布于 2024-05-16 19:06:02

文档已过时,右表达式为repeat['variable'].index,如下所示:

from chameleon import PageTemplate

tmpl = '''
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n">

<table border="1">
<tr tal:repeat="d xxx">
<td tal:repeat="p d.items()">
<span tal:omit-tag="" tal:content="p[1 if repeat['d'].index else 0]"></span>
</td>
</tr>
</table>

</html>
'''

template = PageTemplate(tmpl)
data = {"xxx": [
    {"name": "John", "age": 30},
    {"name": "Michael", "age": 34}
]}
print(template(**data))

相关问题 更多 >