turbogears2 умножить цену и стоимость из строк запроса
Я знаю, что этот вопрос уже задавался, но я не мог понять идею, стоящую за ответами, поскольку я новичок в программировании, и почти все мне кажется новым.
Я пытаюсь умножить цену каждого ингредиента на его количество, чтобы получить его стоимость, а затем сложить стоимость всех ингредиентов, чтобы получить final_cost рецепта и просмотреть его в моем HTML-шаблоне.
У меня есть запрос, который возвращает словарь ключей и значений из БД, и теперь я застрял с расчетами и просмотра final_cost на HTML
@expose('recipe4.templates.newnew')
def getTotalCost(self):
i = Ingredient
ic = Ingredient_Cost
ri = Recipe_Info
r = Recipe
val = DBSession.query(i.ingredient_name, ic.Unit_of_Measure, ri.quantity, ic.price_K, ic.updated_at).filter \
(r.recipe_name == "pancake",
r.recipe_id == ri.recipe_id,
ri.ingredient_id == i.ingredient_id,
i.ingredient_id == ic.ingredient_id)
dict(entries=val)
final_cost=0
for k,v in entries:
price=entries.price_K
qty=entries.quantity
cost=price*qty
final_cost+=cost
return final_cost
1 ответ
Я наконец решил свою проблему с помощью @amol и дальнейших исследований, и это работает для меня.
sub_cost=[ ]
final_cost=[ ]
for k in val: #iterate through each row of tuples in the returned db object
for v in k: #iterate through each values of individual tuples
price=k[3] #position of price in tuple
qty=k[4]
cost=price*qty
sub_cost.append(cost)
break #breaks the loop
final_cost.append(sum(sub_cost))
return dict(final_cost=final_cost)
Я не проверял код шаг за шагом, но общая идея кажется правильной. Основная проблема, которую я вижу, заключается в том, что вы выставляете шаблон recipe4.templates.newnew
но вы не возвращаете словарь.
Всякий раз, когда вы открываете шаблон, действие контроллера должно возвращать словарь. Все ключи словаря будут доступны в шаблоне как переменные.
Так что вы должны сделать return dict(final_cost=final_cost)
если ты хочешь иметь final_cost
доступно в вашем шаблоне.
См. https://turbogears.readthedocs.io/en/latest/turbogears/templating.html.