Django:返回 [Object object] 而不是 Django 视图数组
Django: [Object object] returned instead of django view array
我的 Django 项目有点小问题。比方说,我有一个视图用于从数据库中提取数据和 return 电话簿名称数组。当我将 returned 数据(电话簿联系人数组)放入警报中时,名字很好,例如:"Adam"、"Brittany" 等。当我 console.log returned 数据,项目名称也是 returned("Adam"、"Brittany" 等)。使用 javascript,我试图让数据显示在 td 单元格内,只是 individual 项目名称,所以 Adam 有一个 div,一个 div 用于Brittany 等。不幸的是,我的代码没有显示联系人姓名,而是多次显示 [Object object]。如何获取联系人姓名来代替 [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;
});
编辑:
我还确保将正确的 modules/files 导入每个 python 文件。
您的迭代永远不会一次产生 1 个姓名,因为您的 $.each
正在遍历所有联系人。
您应该在联系人迭代中移动 generateCard
函数并使用 obj
变量而不是传递整个数组(传递整个数组将输出未定义或 [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
。
我的 Django 项目有点小问题。比方说,我有一个视图用于从数据库中提取数据和 return 电话簿名称数组。当我将 returned 数据(电话簿联系人数组)放入警报中时,名字很好,例如:"Adam"、"Brittany" 等。当我 console.log returned 数据,项目名称也是 returned("Adam"、"Brittany" 等)。使用 javascript,我试图让数据显示在 td 单元格内,只是 individual 项目名称,所以 Adam 有一个 div,一个 div 用于Brittany 等。不幸的是,我的代码没有显示联系人姓名,而是多次显示 [Object object]。如何获取联系人姓名来代替 [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;
});
编辑:
我还确保将正确的 modules/files 导入每个 python 文件。
您的迭代永远不会一次产生 1 个姓名,因为您的 $.each
正在遍历所有联系人。
您应该在联系人迭代中移动 generateCard
函数并使用 obj
变量而不是传递整个数组(传递整个数组将输出未定义或 [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
。