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,
    })
Вернуться на верх