【问题标题】:Jquery construct array from django objectJquery从django对象构造数组
【发布时间】:2012-11-14 23:19:08
【问题描述】:

我的表中有 20 百万行。我正在尝试使用http://www.jqplot.com/tests/date-axes.php(日期与时间)绘制时间戳图,jquery 将如何处理这么多数据来绘制它。两个问题:

1.如何从以下代码构造数组:

line1=[['2008-09-30',4], ['2008-10-30',6], ['2008-11-30',5], ['2008-12-30',9], ['2009-01-30',8]];`

2.在这种情况下如何即兴创作代码:

def get_data(request):
 cdr = Cdr.objects.values_list('start_of_call',flat=True)
 context_instance=RequestContext(request, {})) 
 return render_to_response('cdr/get_data.html', context_instance=RequestContext(request, {'cdr':cdr}))

模板:

<script class="code" type="text/javascript">
$(document).ready(function(){

{% for c in cdr %}
  {{ c|date:"d M Y"}}
{% endfor %}
 How to construct the below array line from for loop or using jquery methods
//var line1=[['2008-09-30',4], ['2008-10-30',6], ['2008-11-30',5], ['2008-12-30',9], ['2009-01-30',8]];

var plot1 = $.jqplot('chart1', [line1], {
title:'Default Date Axis',
axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}},
series:[{lineWidth:4, markerOptions:{style:'square'}}]
});
});
 </script>

EDIT

  line1=[['2008-09-30',4], ['2008-10-30',6], ['2008-11-30',5], ['2008-12-30',9], ['2009-01-30',8]];`

在上面的第 4,6,5,9,8 行是小时

EDIT2

CDR 值:

    [datetime.datetime(2012, 9, 13, 15, 54, 52, tzinfo=<UTC>), datetime.datetime(2012, 9, 22, 18, 24, 18, tzinfo=<UTC>), datetime.datetime(2012, 9, 6, 7, 42, 50, tzinfo=<UTC>), datetime.datetime(2012, 9, 7, 21, 27, 13, tzinfo=<UTC>), datetime.datetime(2012, 9, 3, 11, 57, 9, tzinfo=<UTC>), datetime.datetime(2012, 9, 1, 17, 23, 41, tzinfo=<UTC>), datetime.datetime(2012, 9, 15, 6, 14, 33, tzinfo=<UTC>), datetime.datetime(2012, 9, 4, 5, 36, 30, tzinfo=<UTC>), datetime.datetime(2012, 9, 17, 10, 45, 6, tzinfo=<UTC>), datetime.datetime(2012, 10, 1, 3, 1, 17, tzinfo=<UTC>), datetime.datetime(2012, 9, 27, 8, 36, 41, tzinfo=<UTC>), datetime.datetime(2012, 9, 30, 3, 12, 18, tzinfo=<UTC>), datetime.datetime(2012, 9, 18, 4, 8, 49, tzinfo=<UTC>), datetime.datetime(2012, 9, 2, 7, 21, tzinfo=<UTC>), datetime.datetime(2012, 9, 19, 16, 57, 34, tzinfo=<UTC>), datetime.datetime(2012, 9, 17, 17, 14, 49, tzinfo=<UTC>), datetime.datetime(2012, 9, 1, 22, 40, 33, tzinfo=<UTC>), datetime.datetime(2012, 9, 15, 1, 7, 39, tzinfo=<UTC>), datetime.datetime(2012, 9, 22, 17, 11, 45, tzinfo=<UTC>), datetime.datetime(2012, 9, 10, 3, 16, 21, tzinfo=<UTC>), '...(remaining elements truncated)...']

【问题讨论】:

  • 能把cdr的值贴出来
  • 我不太清楚您要做什么。你能举一个cdr中的值的例子吗(也许给它一个更好的名字)。您正在尝试在模板中构建字符串line1=[['2008-09-30',4], ['2008-10-30',6],...,对吗?为什么不使用 JSON 将 Python 数据翻译成相应的 JavaScript 结构?
  • cdr 值为 2012-09-28 14:37:22+00:00 ,2012-09-21 14:37:22+00:00,.......跨度>
  • @scytale:我正在尝试使用给定值绘制图表
  • 你能把 cdr 显示为 python 漂亮打印的数据结构吗?还有什么理由不使用 JSON?

标签: jquery django jquery-ui django-views jqplot


【解决方案1】:

类似这样的:

from django.utils import simplejson

def get_data(request):
    cdr = [(x.strftime('%Y-%M-%D'), x.hour) for x in \
            Cdr.objects.values_list('start_of_call',flat=True)]
    return render_to_response('cdr/get_data.html',
                              {'cdr': simplejson.dumps(cdr)},
                              context_instance=RequestContext(request))

strftime 中的格式字符串可能有点偏离 - 请在此处查看:http://docs.python.org/2.7/library/datetime.html#strftime-strptime-behavior

顺便说一下,您的视图使用 RequestContext 做了一些奇怪的事情 - 以上是更常见的样式。

模板:

line1 = jQuery.parseJSON({{ cdr }})

至于样本大小的问题 - 没有明确的答案 - 这将取决于您的网络连接、浏览器和机器。 siad 20M 非常大 - 考虑对数据集进行采样以将其缩小到更易于管理的大小 - 实验将是最好的方法。

【讨论】:

  • 我真的不想走这条路(使用列表理解)。因为我已经正确地说明了这个问题。我真的想为数百万行找到一个最佳解决方案。+1 为所有帮助.欣赏它
  • 那么您将不得不在某个阶段迭代 cdr 以将 datetime 对象转换为 (str, int)。无论如何,您应该一次问 1 个问题。您的问题没有询问最佳解决方案 - 您询问了如何从 Python 数据结构构造一个 JS 数组,其次是如何“即兴创作”一些代码,我理解这意味着如何改变您的视图以传递该数据结构。如果您想知道如何优化代码,那么您应该提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2022-08-19
  • 2014-11-19
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多