Django博客点赞按钮无法记录数据:点击跳转正常但无点赞新增
问题分析与修复方案
1. URL路由冲突(核心问题)
你的urls.py中两个视图使用了完全相同的路径<slug:slug>/,Django会按路由定义顺序匹配,只会执行第一个get_post视图,like_post永远不会被触发——这就是点赞操作未执行的根本原因。
修复方法:给点赞路由添加独特路径前缀,比如:
# urls.py path('<slug:slug>/', views.get_post, name='viewpost'), path('<slug:slug>/like/', views.like_post, name='likepost'),
2. 重定向参数错误
like_post视图中的redirect写法有误,需使用对应URL名称viewpost,并传递关键字参数而非字典:
修复后的like_post视图:
def like_post(request, slug): post = get_object_or_404(BlogPost, slug=slug) if post.likes.filter(id=request.user.id).exists(): post.likes.remove(request.user) else: post.likes.add(request.user) messages.success(request, "Thanks for the like...:-)") # 修正重定向逻辑 return redirect('viewpost', slug=slug)
3. HTML按钮type拼写错误
按钮的type="sumbit"是拼写错误,需改为type="submit"(部分浏览器可容错,但规范写法更稳妥):
<button class="btn btn-outline-secondary rounded-0 custom-button" id="like" type="submit" name="post-id" value="{{ post.slug }}">
额外检查点
确保BlogPost模型正确定义了点赞字段和统计属性:
# models.py示例 class BlogPost(models.Model): # 其他字段... likes = models.ManyToManyField(User, related_name='blog_likes', blank=True) @property def total_likes(self): return self.likes.count()
内容的提问来源于stack exchange,提问作者David Henson
相关产品推荐
相关产品推荐

