TemplateSyntaxError в \stats2

это мой код django

def stats2_view(request):
    monthly_expenses={}
    months_ = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    # if request.method == 'POST':
    #     year = request.POST.get('selected_year')
        # if year:
    expenses = Expense.objects.filter(owner=request.user, date__year=2024)
    monthly_expenses = calculate_expense_month_summary(expenses) 
    years = range(2010, datetime.datetime.now().year+1)
    return render(request, 'expense/stats2.html', {'expense_month_data': monthly_expenses,'yr': years,'months':months_})

и, этот шаблон

<div class="col-md-6">
          <h2>Details</h2>
          <div class="text-md-start center-paragraph">
            <h3>For the year 2024 the break down for each month is as follows</h3>
            {% for month_num, expense in expense_month_data.items %}
              <p>Total amount spent in {{ months[month_num]}} till now is <span class="fw-bold">{{ expense }}</span></p>
            {% endfor %}
          </div>
      </div>

Ошибка, которую я получаю TemplateSyntaxError в /stats2

я хочу вывести месяц из индекса

В языке шаблонов Django нельзя использовать bracket notation для доступа к значениям словаря. Вместо этого используйте dot notation.

... 
{% for month_num, expense in expense_month_data.items %}
    <p>Total amount spent in {{ months.month_num }} till now is <span class="fw-bold">{{ expense }}</span></p>
{% endfor %}
... 

Язык шаблонов Джанго не поддерживает подзапись (т.е. x[y]), это было сделано намеренно, чтобы не дать людям писать бизнес-логику в шаблонах. Можно использовать Jinja в качестве языка шаблонов, но это не обязательно и в некоторой степени контрпродуктивно, именно для того, чтобы предотвратить написание бизнес-логики в шаблоне.

def stats2_view(request):
    months_ = [
        'January',
        'February',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December',
    ]
    expenses = Expense.objects.filter(owner=request.user, date__year=2024)
    monthly_expenses = calculate_expense_month_summary(expenses)
    monthly_expenses = {months_[k]: v for k, v in monthly_expenses.items()}
    return render(
        request, 'expense/stats2.html', {'expense_month_data': monthly_expenses}
    )

и визуализировать с помощью:

{% for month, expense in expense_month_data.items %}
    <p>Total amount spent in {{ month }} till now is <span class="fw-bold">{{ expense }}</span></p>
{% endfor %}
Вернуться на верх