Django возвращает только последнюю строку диктанта в шаблоне
Я пытаюсь вернуть значения из Dict в Django.
Мой views.py
печатает правильные данные в терминале при выполнении GET-запроса к моей странице, однако в моем шаблоне я получаю только последнюю строку словаря.
Я пробовал зацикливать dict в моем шаблоне и всевозможные комбинации, но не могу заставить его работать. Может быть, я что-то упускаю? Например, в приведенном ниже шаблоне я печатаю весь dict. Но все равно почему-то выводится только последняя строка.
views.py
fruits = [
'Apple', 'Banana', 'Orange']
for fruit in fruits:
price_change = historical_prices['price_change'][::-1]
low_price = 0
for day in price_change:
if day < -0.1:
low_price += 1
else:
break
if low_price >= 0:
ls_dict = {'fruit': fruit, 'low_price': low_price}
print(ls_dict)
return render(request, "prices/index.html", {
"ls_dict": ls_dict,
})
Шаблон
<p>{{ ls_dict }}</p>
Вывод шаблона
{'fruit': 'Orange', 'low_price': 1}
Корректная печать, которую производит views.py
{'fruit': 'Apple', 'low_price': 1}
{'fruit': 'Banana', 'low_price': 3}
{'fruit': 'Orange', 'low_price': 1}
print()
кажется правильным, но вы просто переопределяете переменную снова и снова, таким образом ls_dict
будет установлен только на последней итерации цикла for
.
Вы можете проверить это, выйдя print(ls_dict)
за пределы for
цикла
Попробуйте следующее:
ls_list = []
for fruit in fruits:
price_change = historical_prices['price_change'][::-1]
low_price = 0
for day in price_change:
if day < -0.1:
low_price += 1
else:
break
if low_price >= 0:
ls_dict = {'fruit': fruit, 'low_price': low_price}
ls_list.append(ls_dict)
return render(request, "prices/index.html", {
"ls_list": ls_list,
})