简单 'for loop' 日期时间字段在 Django 中不起作用(google 图表)
Easy 'for loop' for datetime field not working in Django(google chart)
我正在尝试在我的 Django 项目中使用 google 图表,google 图表需要格式如下
['label1', 'label2', 'label3', new Date(Y, m, d), new Date(Y, m, d), null, 100, null], 它是
就像一个列表,所以我首先尝试保持简单,我只用模板标签替换了日期并将其他字段保留为默认值。模板标签在 P 元素中单独运行良好,输出结果为“2014、10、12”。
如果有人能看一下,我将不胜感激,干杯。
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'))
)
todos = project.todo_set.order_by('-project_code')
return render(request, 'todo_lists/progress.html', {"counts_data":counts_data,'team':team,'todos':todos})
HTML
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task ID');
data.addColumn('string', 'Task Name');
data.addColumn('string', 'Resource');
data.addColumn('date', 'Start Date');
data.addColumn('date', 'End Date');
data.addColumn('number', 'Duration');
data.addColumn('number', 'Percent Complete');
data.addColumn('string', 'Dependencies');
data.addRows([
{% for todo in todos %}
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null]{% if not forloop.last %},{% endif %}{% endfor %}
]);
您正在将 for 循环混合到您的数据类型中,这可能是您的问题。我认为你最好选择这样的东西:
{% for todo in todos %}
data.addRow(
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null]
);
{% endfor %}
我解决了,原来是template标签的问题,数据集的第一列不能相同,否则会出现一行输出,而且由于我的satrt_date 和数据库中存储的 due_date 相同,因此图表上没有显示任何内容。
我在 HTML:
中使用了以下代码
HTML
'''
{% for todo in todos %}
['{{ todo.name }}', 'Introduction Project', 'Introduction',
new Date({{todo.start_date|date:"Y, m, d"}}), new Date({{todo.due_date|date:"Y, m, d"}}), null, 50, null]{% if not forloop.last %},{% endif %}
{% endfor %}
'''
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'))
)
todos = project.todo_set.order_by('-project_code')
return render(request, 'todo_lists/progress.html', {"counts_data":counts_data,'team':team,'todos':todos})
HTML
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task ID');
data.addColumn('string', 'Task Name');
data.addColumn('string', 'Resource');
data.addColumn('date', 'Start Date');
data.addColumn('date', 'End Date');
data.addColumn('number', 'Duration');
data.addColumn('number', 'Percent Complete');
data.addColumn('string', 'Dependencies');
data.addRows([
{% for todo in todos %}
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null]{% if not forloop.last %},{% endif %}{% endfor %}
]);
您正在将 for 循环混合到您的数据类型中,这可能是您的问题。我认为你最好选择这样的东西:
{% for todo in todos %}
data.addRow(
['Introduction', 'Introduction Project', 'Introduction',
new Date({{ todo.start_date|date:"Y,m,d"}}), new Date({{ todo.due_date|date:"Y,m,d"}}), null, 50, null]
);
{% endfor %}
我解决了,原来是template标签的问题,数据集的第一列不能相同,否则会出现一行输出,而且由于我的satrt_date 和数据库中存储的 due_date 相同,因此图表上没有显示任何内容。 我在 HTML:
中使用了以下代码HTML
'''
{% for todo in todos %}
['{{ todo.name }}', 'Introduction Project', 'Introduction',
new Date({{todo.start_date|date:"Y, m, d"}}), new Date({{todo.due_date|date:"Y, m, d"}}), null, 50, null]{% if not forloop.last %},{% endif %}
{% endfor %}
'''