Django中'int' object is not iterable错误的原因分析与解决方法
解决Django搜索功能中的'int' object is not iterable错误
嘿,这个问题我一眼就看出来啦!你怀疑是字典的锅,但其实根源在posts变量的赋值上。
错误原因
看你视图里的这段代码:
posts = RelatedPost.objects.filter(text__icontains=querystring).count()
.count()方法的作用是返回符合查询条件的记录总数,它的返回值是一个整数。但你在模板里写了{% for post in posts %},试图遍历这个整数——整数可不是可迭代对象(没法循环),所以就触发了'int' object is not iterable错误。
解决办法
根据你的需求,有两种处理方式:
如果要展示符合条件的帖子内容:
直接去掉.count(),让posts等于查询集本身(Django的QuerySet是可迭代的):posts = RelatedPost.objects.filter(text__icontains=querystring)这样模板里的
{% for post in posts %}就能正常遍历每一篇帖子,显示post.text了。如果既要展示帖子列表,又要显示总数:
把列表和总数分开存成两个变量:post_list = RelatedPost.objects.filter(text__icontains=querystring) post_count = post_list.count() context = {"posts": post_list, "post_count": post_count, "users": users}之后在模板里,你可以用
{{ post_count }}显示帖子总数,同时循环posts来展示每篇帖子的内容。
内容的提问来源于stack exchange,提问作者GIUSEPPE FONTANA
相关产品推荐
相关产品推荐

