You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:02:53