Reputation: 3749
I am trying to use Chameleon Template for Python (it's based on Zope TAL/METAL language). This simple template raises error (dic
is dictionary in the list):
<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>
I tried dic.index
, dic.item.index
, repeat.index
, repeat.item.index
but all of them looks wrongly. What is the right syntax to access looping item index?
Upvotes: 0
Views: 259
Reputation: 3749
Documentation is outdated, right expression is repeat['variable'].index
like here:
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))
Upvotes: 2