【问题标题】:DJANGO simplejsonDJANGO simplejson
【发布时间】:2012-05-17 02:27:25
【问题描述】:

下午好..我有一个这样的模型:

class Reportage:
    def get_num(self):
        end_date = self.date.end_date
        start_date = self.date.start_date
        duration = time.mktime(end_date.timetuple()) - time.mktime(start_date.timetuple())
        delta_t = duration / 60
        num = []

        for t in range(0,duration,delta_t):
            start = t + start_date
            end = datetime.timedelta(0,t+delta_t) + start_date
            n_num = self.get_num_in_interval(start,end)
            num.append([t, n_num])
        return num

我想用 simplejson 序列化 views.py 中的数组 num [] 以便在第二时刻将此数组传递给 jquery 脚本以将其绘制在图表中。 序列化该数组的代码是什么..? 我希望我很清楚..提前感谢所有回复的人..

【问题讨论】:

    标签: django django-views simplejson


    【解决方案1】:

    如果您希望在模型中执行此操作,可以使用以下方法:

    # if this were a models.py file:
    
    import simplejson
    # other django imports:
    
    class SomeModel(models.Model):
    
        property = models.SomeField()...
    
        def some_function(self):
            num = []
    
            # full num
    
            simplejson.dumps(num)
    

    这会将num 转储为 json 的字符串表示形式,然后您可以将其返回或写入文件,等等。

    从视图中您可以选择 - 但如果您的视图是返回一些 json 进行处理的 ajax 视图,您可以这样做:

    # views.py
    
    # ...
    
    def my_ajax_call(request, model_pk):
        try:    
            mymodel = SomeModel.get(pk=model_pk)
        except SomeModel.NotFoundException as e:
            return HttpResonse("Unknown model", status=404)
        else:
            return HttpResponse(mymodel.some_function()) # returns simplejson.dumps(num)
    

    然后可以在 Javascript 中的模板中使用它 - 另一个答案向您展示了如何处理它:)

    【讨论】:

    • 首先,感谢您的快速回复。 simplejson 但是我直接在同一个models.py文件的函数中做呢?现在我想在模板中使用以下 jquery 插件来绘制向量“num”。我如何出现更改脚本? jqplot.com/tests/data-renderers.php
    • @dottorg 为你填写了我的答案——这有帮助吗?
    【解决方案2】:

    在@ninefingers 的回复之后。我认为您的问题是针对如何使转储的 json 字符串可用于 jQuery 插件。

    # views.py
    
    def my_view(request):
    # do stuff
    num = reportage_instance.get_num()
    num_json = simplejson.dumps(num)
    return render(request, 'template.html', {
      'num_json': num_json,
    })
    

    在您的模板中,您将 json obj 作为 Javascript 变量提供

    # template.html
    
    <html>
    <body>
    <script>
    var NUM_JSON = {{num_json|safe}};
    myScript.doSomething(NUM_JSON);
    </script>
    </body>
    </html>
    

    现在您可以使用 NUM_JSON 变量调用常规 JS。

    【讨论】:

    • 感谢您的回答,但现在如果我想使用 jqplot 的以下插件:“jqplot.com/tests/data-renderers.php"..what 我必须在该网站建议的脚本中编写来绘制我的 num_json 数组??
    • 阅读文档,似乎 $.jqplot 的第二个参数可以是端点字符串或 js 数据。所以试试 $.jqplot('mychart', NUM_JSON);
    猜你喜欢
    • 2012-06-12
    • 2011-09-21
    • 2011-12-08
    • 2011-07-31
    • 2011-12-28
    • 2016-09-07
    • 2011-01-16
    • 2013-04-29
    • 2012-10-11
    相关资源
    最近更新 更多