Im пытается итерации по списку nestled dict. Первый уровень работает отлично. Но второй уровень рассматривается как строка, а не dict.Нельзя перебирать nestled dict в django
В моем шаблоне я это:
{% for product in Products %}
<li>
<p>{{ product }}</p>
{% for partType in product.parts %}
<p>{{ partType }}</p>
{% for part in partType %}
<p>{{ part }}</p>
{% endfor %}
{% endfor %}
</li>
{% endfor %}
Это {{часть}}, что просто перечислить 1 символ в то время на основе partType. И это швы, что это рассматривается как строка. Тем не менее, я могу использовать точечную нотацию для всех dict, но не для цикла for. Текущий результат выглядит следующим образом:
Color
C
o
l
o
r
Style
S
.....
объект Products выглядит в журнале:
[{'product': <models.Products.Product object at 0x1076ac9d0>, 'parts': {u'Color': {'default': u'Red', 'optional': [u'Red', u'Blue']}, u'Style': {'default': u'Nice', 'optional': [u'Nice']}, u'Size': {'default': u'8', 'optional': [u'8', u'8.5']}}}]
То, что я пытаюсь сделать, это соединить вместе Dict/список для продукта из ряда различных SQL-запросов.
Веб-обработчик выглядит следующим образом:
typeData = Products.ProductPartTypes.all()
productData = Products.Product.all()
langCode = 'en'
productList = []
for product in productData:
typeDict = {}
productDict = {}
for type in typeData:
typeDict[type.typeId] = { 'default' : '', 'optional' : [] }
productDict['product'] = product
productDict['parts'] = typeDict
defaultPartsData = Products.ProductParts.gql('WHERE __key__ IN :key', key = product.defaultParts)
optionalPartsData = Products.ProductParts.gql('WHERE __key__ IN :key', key = product.optionalParts)
for defaultPart in defaultPartsData:
label = Products.ProductPartLabels.gql('WHERE __key__ IN :key AND partLangCode = :langCode', key = defaultPart.partLabelList, langCode = langCode).get()
productDict['parts'][defaultPart.type.typeId]['default'] = label.partLangLabel
for optionalPart in optionalPartsData:
label = Products.ProductPartLabels.gql('WHERE __key__ IN :key AND partLangCode = :langCode', key = optionalPart.partLabelList, langCode = langCode).get()
productDict['parts'][optionalPart.type.typeId]['optional'].append(label.partLangLabel)
productList.append(productDict)
logging.info(productList)
templateData = { 'Languages' : Settings.Languges.all().order('langCode'), 'ProductPartTypes' : typeData, 'Products' : productList }
Я попытался сделать в Dict в ряде различных способов. Как и вначале составление списка, затем дикта, я использовал тюльпы, о которых я мог думать.
Любая помощь приветствуется!
Bouns: Если у кого-то есть другой подход к запросам SQL, это более чем приветствуется. Я чувствую, что это глупо, чтобы запустить такое количество запросов. Что происходит, что каждая часть продукта имеет другую базу меток на langCode.
..fredrik
В хранилище данных App Engine не используются SQL-запросы. – geoffspear
О, мой плохой. Я имею в виду GQL :) – fredrik