Django实现评论数千位显示(如1k代1000)报错求助
解决Django视图返回float导致的错误并实现评论数格式化
嘿,我一眼就看到问题所在啦!你在判断评论数≥1000的时候直接return r返回了一个浮点数,但Django的视图函数必须返回一个HttpResponse类的实例(比如render()的结果),直接返回数值的话,Django会尝试调用它的get()方法,而浮点数没有这个方法,所以才会报错'float' object has no attribute 'get'。
接下来我帮你修正代码,同时实现你要的“1k评论”格式化效果:
def DisplayPic(request, slug): # 获取图片对象 AdvertObj = get_object_or_404(Images, slug=slug) # 获取该图片的所有评论(all()可以省略,filter本身就是查询集) comments = ProductComments.objects.filter(company=AdvertObj) # 计算评论总数 commentcount = comments.count() # 处理评论数的显示文本 if commentcount >= 1000: # 这里可以根据需求调整格式:比如保留一位小数显示1.2k,或者取整显示1k display_count = f"{commentcount / 1000:.1f}k评论" # 如果想要只显示整数部分(比如1000→1k,1999→1k),可以用整数除法 # display_count = f"{commentcount // 1000}k评论" else: display_count = f"{commentcount}评论" # 将处理好的显示文本传入上下文 context = {'display_count': display_count} template_name = 'templat.html' # 统一返回render的结果,不要提前返回数值 return render(request, template_name, context)
关键改动说明:
- 移除了错误的
return r,改成生成用于显示的字符串display_count - 把格式化后的文本放到上下文里,传递给模板
- 确保整个函数最后只返回
render()的结果,符合Django视图的要求 - 简化了查询集写法,
filter()前的all()是多余的,可以直接省略
然后在你的模板templat.html里,直接使用{{ display_count }}就能显示格式化后的评论数啦~
内容的提问来源于stack exchange,提问作者ebong
相关产品推荐
相关产品推荐

