Как правильно использовать многогранные словари в Cheetah для Python? - PullRequest
1 голос
/ 16 августа 2010

У меня есть следующий словарь:

{0: {'Shortname': 'cabling', 'Name': 'CAT5 Cabling', 'MSRP': '$45.00'}, 1: {'Shortname': 'antenna', 'Name': 'Radio Antenna', 'MSRP': '$35.00'}}

И, используя Гепард, следующий раздел шаблона:

#for $item in $items
<tr>
<td>$item.Name</td>
<td>$item.MSRP</td>
</tr>
#end for

Когда я запускаю код, я получаю эту ошибку:

<class 'Cheetah.NameMapper.NotFound'>: cannot find 'Name'
      args = ("cannot find 'Name'",)
      message = "cannot find 'Name'" 

В шаблоне, строка 1, в объявлении #for я попытался выделить значение ключа, например:

#for $key, $value in $items

Однако я все еще не могу перебрать значениячтобы получить необходимую информацию.

Я делаю что-то явно неправильно?

1 Ответ

2 голосов
/ 17 августа 2010

Во-первых, у меня были проблемы с использованием предметов в качестве имени переменной в Cheetah.Может быть зарезервированное слово или что-то.Может быть лучше использовать что-то менее общее.

Во-вторых, поскольку вы используете внешний dict с целым числом в качестве ключа, $ item будет этим целым числом.Это означает, что вы ищете имя в целом числе.Так что в вашем случае с подобным диктом вы можете сделать (с другим именем диктата тоже):

#for $item in $products
<td>$products[$item].Name</td>
...
#end for

Подобный список будет работать с вашим шаблоном.

products = [{'Name':'prod1', ...}, {'Name': 'prod2', ...}]
...