TypeError:count()只接受一个参数

Ale*_*lex 12 python django

我是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 })  
Run Code Online (Sandbox Code Playgroud)

sen*_*rle 17

count需要一个论点.它返回列表中特定项的实例数.

>>> l = range(10) + range(10)
>>> l.count(5)
2
Run Code Online (Sandbox Code Playgroud)

2这是5列表中的s 数.如果您想要列表的长度,请使用len.

>>> len(l)
20
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 7

不太清楚您在这里尝试做什么。flashcard_list是一个(空)列表,您在循环之前定义它。它没有意义调用Django的查询集功能,如countfilter它(有一个名为计数列表的方法,但作为错误说,它需要一个说法,并指控,很参数在列表中找到的次数)。

你的意思是flashcard.count()改用吗?这仍然没有意义,因为 flashcard 是单个 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)
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到您正在对所有抽认卡的查询集进行操作,而不是一个空列表。而且您正在构建一个字典,而不是字典列表,并且该字典本身成为模板上下文 - 因此在模板中您可以引用{{ words_count }}等。


Mat*_*ock 5

count()查找项目在列表中出现的次数,因此需要该项目作为参数。我认为您正在寻找列表中的项目数。对于这种用途len()count()

flashcard_dict['words_count'] = len(flashcard_list)
flashcard_dict['words_known'] = len(flashcard_list.filter(known=Yes))
Run Code Online (Sandbox Code Playgroud)

一个例子count()

flashcard_dict['dog_count'] =flashcard_list.count('dog')
Run Code Online (Sandbox Code Playgroud)


Ran*_*Rag 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)
>>>
Run Code Online (Sandbox Code Playgroud)

很难理解你想要实现什么目标,你的flashcard_list列表是空的。因此,在调用count它之前,您需要向列表中添加一些内容。