我是Python和Django的新手,我从教程中修改了这段代码。我加载页面时收到TypeError: count() takes exactly one argument (0 given)
。我一直在进行故障排除和谷歌搜索,似乎无法搞清楚。我做错了什么?
def report(request):
flashcard_list = []
for flashcard in Flashcard.objects.all():
flashcard_dict = {}
flashcard_dict['list_object'] = flashcard_list
flashcard_dict['words_count'] = flashcard_list.count()
flashcard_dict['words_known'] = flashcard_list.filter(known=Yes).count()
flashcard_dict['percent_known'] = int(float(flashcard_dict['words_known']) / flashcard_dict['words_count'] * 100)
flashcard_list.append(flashcard_dict)
return render_to_response('report.html', { 'flashcard_list': flashcard_list })
答案 0 :(得分:16)
count
需要一个参数。它返回列表中特定项的实例数。
>>> l = range(10) + range(10)
>>> l.count(5)
2
2
这里是列表中5
的数量。如果您想要列表的长度,请使用len
。
>>> len(l)
20
答案 1 :(得分:4)
你在这里尝试做什么并不是很清楚。 flashcard_list
是一个(空)列表,您在循环之前定义它。在它上面调用Django查询集函数如count
和filter
是没有意义的(有一个名为count的列表方法,但正如错误所说,它需要一个参数,并计算数量在列表中找到该参数的时间。)
您的意思是使用flashcard.count()
吗?这仍然没有意义,因为闪存卡是单个Flashcard实例,而不是查询集。你需要更准确地解释一下你希望做什么。
评论后修改是的,所以我认为问题在于你是在尝试在循环中完成所有这些操作,因为某些原因,迭代每个Flashcard。事实上,我认为你根本不想要循环。这样的事情会更好:
def report(request):
flashcard_dict = {}
flashcards = Flashcard.objects.all():
flashcard_dict['list_object'] = flashcards
flashcard_dict['words_count'] = flashcards.count()
flashcard_dict['words_known'] = flashcards.filter(known=True).count()
flashcard_dict['percent_known'] = int(float(flashcard_dict['words_known']) / flashcard_dict['words_count'] * 100)
return render_to_response('report.html', flashcard_dict)
在这里,您可以看到您正在操作所有闪存卡的查询集,而不是空列表。而且你正在建立一个字典,而不是字典列表,而且字典本身就成了模板上下文 - 所以在模板中你可以引用{{ words_count }}
等。
答案 2 :(得分:4)
count()
查找项目在列表中出现的次数,因此需要该项目作为参数。我想你在寻找列表中的项目数量。对于此用途,len()
不是count()
flashcard_dict['words_count'] = len(flashcard_list)
flashcard_dict['words_known'] = len(flashcard_list.filter(known=Yes))
count()
的一个例子是
flashcard_dict['dog_count'] =flashcard_list.count('dog')
答案 3 :(得分:0)
你需要给count(x)提供一些论据。
它返回x出现在列表中的次数。
>>> mylist = [1,2,3,2]
>>> mylist.count(2)
2
>>> mylist.count()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: count() takes exactly one argument (0 given)
>>>
很难理解您要实现的目标flashcard_list
列表是空的。因此,在调用count
之前,您需要在列表中添加一些内容。
答案 4 :(得分:0)
alist = []
alist.append('a')
alist.count('a')
1
这将计算列表中的所有“a”。
答案 5 :(得分:0)
count
方法并不是您想要的。在Python列表中,list.count(x)
会告诉您x
中list
的出现次数。你想要len(flashcard_list)
。函数len
是一个内置函数,它将告诉你许多Python对象类型的长度。
答案 6 :(得分:0)
列表的count
方法计算x
在列表中显示的次数。查看文档here。
如果您想知道列表中的项目数量,您需要使用len()
>>> a = ['a', 'b', 'c']
>>> print len(a)
3