Django как вывести список значений в html для 'for loop' в моем случае?
Я хочу знать, как я могу вывести что-то вроде [value1, value2, value3] из Django. Chart.js использует такой формат данных. В моем понимании, counts_data=...aggregate(..., ..., ...) - это список, похожий на список значений (value1, value2, value3), но затем, когда я возвращаю, он должен быть диктой, поэтому я превращаю его в context = {"counts_data", counts_data}, что похоже на на {counts_data1: (value1, value2, value3), counts_data2:(value1, value, value3),...}, поэтому я не уверен, как я могу вывести данные типа [value1, value2, value3], я пытался поместить их в один queryset, но queryset может получать или фильтровать только один статус, а у меня 3 статуса, так что я запутался, было бы здорово, если бы кто-нибудь смог немного объяснить? Будьте здоровы
views.py
'''
def visualisation(request, project_id):
project = Project.objects.get(id=project_id)
counts_data = Todo.objects.aggregate(
to_do_count=Count('id', filter=Q(status='to_do')),
in_progress_count=Count('id', filter=Q(status='in_progress')),
done_count=Count('id', filter=Q(status='done'))
)
return render(request, 'todo_lists/progress.html', {"counts_data":counts_data})
'''
html
'''
$(document).ready(function() {
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'doughnut',
data: {
// labels format ['label1', 'label2', 'label3', ]
// you can choose to have a static labels if you are sure that
// there is always a specific number of labels
labels: [{% for label in counts_data %} '{{ label }}', {% endfor %}],
datasets: [{
label: '# of Votes',
// data format [value1, value2, value3, ]
data: [{% for label, value in counts_data.items() %} {{ value }}, {% endfor %}],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: false
}
});
});
'''
Вы можете использовать фильтр шаблона json_script
для вывода переменной в контексте в формате, который вы можете использовать в вашем JS
{{ counts_data|json_script:"counts-data" }}
Затем прочитайте данные и загрузите их в качестве переменной в ваш скрипт
var countsData = JSON.parse(document.getElementById('counts-data').textContent);
Затем вы должны иметь возможность получить доступ к данным, используя countsData.to_do_count
и так далее
Вы можете использовать Object.keys
для получения всех ключей от объекта
Object.keys(countsData)