【问题标题】:format data in views.py for ajax在views.py中为ajax格式化数据
【发布时间】:2012-02-25 18:00:46
【问题描述】:

我正在尝试在 django 中使用这个 eventCalendar:http://jquery-week-calendar.googlecode.com/svn/trunk/jquery.weekcalendar/full_demo/weekcalendar_full_demo.html

我想自己编写 ajax 代码,但另一方面我是 jquery ajax 的新手,我想发送包括 startTime、endTime 等在内的事件数据以在日历上显示:

    $('#calendar').weekCalendar({
    data: function(callback){
        $.getJSON("{% url DrHub.views.getEvents %}",
                {
                },
                function(result) {
                        callback(result);
                }
            );
        }
    }); 

此日历以这种格式获取数据:

  return {
     events : [
        {
           "id":1,
           "start": new Date(year, month, day, 12),
           "end": new Date(year, month, day, 13, 30),
           "title":"Lunch with Mike"
        },
        {
           "id":2,
           "start": new Date(year, month, day, 14),
           "end": new Date(year, month, day, 14, 45),
           "title":"Dev Meeting"
        },
        ...
     ]
  };

如何在getEvents 视图中格式化从数据库中提取的数据?

【问题讨论】:

    标签: django jquery


    【解决方案1】:
    from django.utils import simplejson
    
    def some_view(request):
        # Build the output -> it's a standard Python dict
        output = {
          "events": [
            {
               "id": 1,
               "start": "2009-05-10T13:15:00.000+10:00",
               "end": "2009-05-10T14:15:00.000+10:00",
               "title":"Lunch with Mike"
            },
          ]
        }
    
        # With db data you would do something like:
        # events = Event.objects.all()
        # for event in events:
        #     event_out = {
        #         "title": event.title,
        #          # other fields here
        #     }
        #     output['events'].append(event_out)
    
        # Return the output as JSON
        return HttpResponse(simplejson.dumps(output), mimetype='application/json')
    

    【讨论】:

    • 非常感谢@Secator,你的回答很好,当我要使用数据库来填充这个字典时,我得到这个错误,“全局名称'输出'没有定义”,我没有'不知道如何定义循环外的输出!我知道我的问题很荒谬,但我不知道我应该寻找什么来解决这个问题!
    • 当我把这个放在 for 循环之前: output={} ,它会导致另一个错误:“异常类型:KeyError at /doctors/shahsavand/visiting/getEvents/ 异常值:'events'”!!
    • 我用另一种方式解决了这个问题,tnx 伙计,我的最后一个问题是,当我保存事件时,它们以这种格式保存:2012 年 2 月 22 日星期三 13:15:00 GMT+0330(伊朗标准时间),但是当我要在日历上显示主题时,它们将不会显示,因为它们的格式与日历日期格式不匹配!我尝试了很多选择,例如在制作 dict 时转换格式,但没有结果:( 我感谢任何帮助.
    【解决方案2】:

    您可以像往常一样构造字典,只要考虑到日期字符串不会在没有处理的情况下在 javascript 中解释。我的建议是直接发送 javascript 可解释的日期,而不是字符串,如下所示:

    from django.utils import simplejson 
    import datetime
    import time
    
    occ.start = time.mktime(occ.start.timetuple())*1000
    occ.end = time.mktime(occ.end.timetuple())*1000
    
    event = {'id': occ.id,'title':occ.title,'start':occ.start,'end':occ.end,'body':occ.description,'readOnly': '%r' %occ.read_only,'recurring':'%r' % occ.recurring,'persisted': '%r' % occ.persisted,'event_id':occ.event.id}
    
    mimetype = 'application/json'
    return HttpResponse(simplejson.dumps(event),mimetype)
    

    考虑到日历需要“事件”键,因此:

    $.getJSON(url, function(data){
                    res = {events:data};
                    //alert(JSON.stringify(res, null, 4));
                    callback(res);
                });
    

    如果您更喜欢在 javascript 端进行处理,请尝试使用库 datejs,它可以从文本转换日期。

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 2020-10-08
      • 2017-05-29
      • 2012-11-23
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多