javascript - Django:返回[Object object]而不是django View 数组

标签 javascript python django

我的 django 项目遇到了一些问题。比方说,我编写了一个 View ,用于从数据库中提取数据并返回电话簿的名称数组。当我将返回的数据(电话簿联系人数组)放入警报中时,名称显示正常,例如:“Adam”、“Brittany”等。当我 console.log 返回的数据时,也会返回项目名称(“亚当”、“布列塔尼”等)。使用javascript,我试图获取要在 td 单元格内显示的数据,仅显示单个项目名称,以便有一个用于 Adam 的 div,一个用于 Brittany 的 div 等。不幸的是,我没有显示联系人姓名,而是显示了联系人姓名。代码多次显示 [Object object]。如何用联系人姓名代替[对象对象]?为什么反而出现[Object object]?感谢您提供的任何帮助。

我的代码如下:

/models.py:

class phonebook(models.Model):
    name = models.Charfield(max_length=200)
    phone_number = models.CharField(max_length=100)

/views.py:

def phonebook_home(request):
    global phonebook
    phonebook = phonebook.objects.order_by('name')

try:
    indexStart = int(request.GET.get('indexStart'))
    indexEnd = indexStart + 3
    next_three_contacts = phonebook.objects.order_by('name')[indexStart:indexEnd]

    serializer = contactSerializer()
    data = serializer.serialize(next_three_contacts)


    contact_count = phonebook.objects.count()
    moreAvailable = ''
    if indexEnd + 3 <= contact_count: 
        moreAvailable = 'more_than_two'
    elif indexEnd + 2 <= contact_count:
        moreAvailable = 'two_more'
    else:
        moreAvailable = 'no_more'
    return JsonResponse({'returned_contacts': data, 'moreAvailable': moreAvailable})
except:
    pass

/Serializers.py:

from django.core.serializers.python import Serializer 

class contactSerializer(Serializer):
    def end_object(self, obj):
        self._current['id'] = obj._get_pk_val()
        self.objects.append( self._current )

/main.js:

function generateCard(contactNameC, iconC) {
    var card = "<td class='tablecells'><a class='tabletext' href='#'><span class='fa "
            + iconC + " concepticons'></span><h2 class='header'>" + contactNameC
            + "</h2><p><span class='fa fa-chevron-circle-right'></span></p></a></td>";
    return card;
}


var indexLast = 9;
$(".showmorebutton").click(function() {
    var config = {
        type: 'GET',
        url: SUBMIT_URL,
        data: {
            indexStart: indexLast
        },
        dataType: 'json',
        success: function (data, textStatus_ignored, jqXHR_ignored)  {
            var moreAvailable = data.moreAvailable;
            var contacts = data.returned_contacts;
            var contactNameLoop = $.each(contacts, function(idx, obj) {
                    console.log(obj.name);
                    alert(obj.name)
                }); 

            if (moreAvailable === "more_than_two") {
                $("table").append("<tr></tr>");
                for (var i = 0; i < 3; i++) {
                var contactName = contactNameLoop[i]
                var icon = "fa facogs";
                $("table tr:last").append(generateCard(contactName, icon));
                }
            }
        }
    };
    $.ajax(config);
    indexLast += 3; 
});

编辑:

我还确保将正确的模块/文件导入到每个 python 文件中。

最佳答案

您的迭代永远不会一次产生 1 个名称,因为您的 $.each 正在迭代所有联系人。

您应该在联系人迭代中移动 generateCard 函数,并使用 obj 变量,而不是传递整个数组(传递整个数组将输出 undefined 或 [object Object]) 到您的 generateCard 函数中。

$.each(contacts, function(idx, obj) {
    var icon = "fa facogs";
    $("table tr:last").append(generateCard(obj, icon));
});    

完整但人为的示例,并假设可能有错误的 json 结构。

var contacts = [
  {name: 'henrik'},
  {name: 'sanaz'},
  {name: 'esther'},
];

var generateCard = function (obj, icon) {
  return "<tr><td>"+obj.name+'</td></tr>';
};
$("table").append("<tr></tr>");
$.each(contacts, function(idx, obj) {
    var icon = "fa facogs";
    $("table tr:last").append(generateCard(obj, icon));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table></table>

更新:

您的问题出在您的generateCard函数上,将contactNameC更改为contactNameC.name

关于javascript - Django:返回[Object object]而不是django View 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801291/

相关文章:

Django 管理模板覆盖不起作用

python - Django 模型中的紧耦合

javascript - 更改 480 宽度 Javascript 按钮的 URL

javascript mixin 访问对象 this

python - Django登录 "?next="只保存一个GET参数

python - 确保四舍五入的百分比总和为每组 100(最大余数法)

Django - 按组注释加权平均值

JavaScript 表单验证错误

javascript - 检查屏幕上是否有任何移动或键盘上是否有点击

python - 如何组合我的数据框的列来创建一个日期时间列,我可以将其用作索引?