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 %}