【问题标题】:Use AJAX to display dictionary data returned by Django view in a table on the template使用 AJAX 在模板上的表格中显示 Django 视图返回的字典数据
【发布时间】:2015-01-31 13:51:36
【问题描述】:

我看到了一些关于这个主题的帖子,但没有一个非常相似。我正在从 Django 视图中取回 JSON 格式的字典,如下所示:

# display game statistics on the developer homepage
def gamestats(request):

    countlist = []
    datedict = {}
    if request.method=='POST' and request.is_ajax:
        id = request.POST.get('id',None)
        gameobj = Games.objects.filter(pk=id)
        # get queryset of Scores objects with the selected game ID
        scores = Scores.objects.filter(game=gameobj)
        # get list of distinct registration dates from "scores" queryset
        datelist = scores.values_list('registration_date',flat=True).distinct()
        for dateobj in datelist:
            scoredate = scores.filter(registration_date=dateobj)
            c = scoredate.count()
            countlist.append(c)

        n = len(countlist)
        for i in range(n):
            t = datelist[i].strftime('%d/%m/%Y')
            datedict[t] = countlist[i]
            print(t)
            print(datedict[t])

        json_stats = json.dumps(datedict)
        return HttpResponse(json_stats,content_type='application/json')

此字典以以下形式保存数据:

{ "29/01/2015" : 2, "21/12/2014" : 1, "23/01/2015": 3 }

现在,在客户端,AJAX 代码如下:

$(".stats").click(function(){
    var game = $(this);
    var id = game.attr('id');
    var csrftoken = getCookie('csrftoken');
    $.ajax({
        type : "POST",
        url : "/gamestats/",
        data : {'id': id, 'csrfmiddlewaretoken': csrftoken},
        dataType : "json",
        success : function(data){
            alert(data);
            //var obj = $.parseJSON(response);
            //for (var key in obj){
            //    alert("inside for loop");
            //    var value = obj[key];
            //    alert(value);
            //    $("#gamestats").html(value);
            //}
        }
    });
    event.preventDefault(); 
});

相关的HTML代码: ...

<tr>
    <td width="10%" align="center"><button class="stats" id="{{game.id}}"> View game statistics</button></td>
</tr>

...

<b>Game statistics: </b>
<p id="gamestats"></p>

由于我对 AJAX 的了解非常有限,我不知道如何处理请求的“成功”参数内的响应。我想在一个表中显示 JSON 数据,有 2 列,一列用于日期(键),另一列用于相应的数字(值)。我想在页面的“gamestats”部分执行此操作。我尝试了一些东西,但它们没有显示任何东西。感谢您的帮助,谢谢!

【问题讨论】:

    标签: jquery python ajax json django


    【解决方案1】:

    如果你想获取一个 JSON 对象并将其放入一个表中,你可以像这样循环它:

    var tableData = '<table>'
    $.each(data, function(key, value){
            tableData += '<tr>';
            tableData += '<td>' + key + '</td>';
            tableData += '<td>' + value + '</td>';
            tableData += '</tr>';
    });
    tableData += '</table>';
    
    $('#table').html(tableData);
    

    【讨论】:

    • 我认为代码中存在一些语法问题。而不是“var tableData += ''”不应该是“var tableData = '
      '”,因为最初没有分配给 tableData 的值?
    • @user3033194 不错。我做的很快。我会编辑。
    • 表格仍未显示。当我为调试编写警报(数据)时,会打开一个显示 [object Object] 的框。但是,当我在“obj = $.parseJSON(data)”行之后写 alert(data) 时,什么都没有显示。当我写警报(obj)时也会发生同样的情况。如果 dataType 为 'json',不应该自动解析吗?
    • @aus_lucy 好的,现在可以使用了。不需要该行“obj = $.parseJSON(data)”,因为“data”已经是 JSON 格式。所以我用“$.each(data, function(key, value){”替换了“$.each(obj, function(key, value){”。非常感谢!!!
    • @user3033194 啊,是的,我忘了 Django json.dumps 会为你处理这些。我编辑了我的答案。乐意效劳。不要忘记投票/接受,因为未来的 SO 用户可以轻松找到类似问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多