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

Django+AJAX实现点赞功能时出现POST 404错误求助

解决Django AJAX点赞功能的404错误及相关问题

你遇到的404 (Not Found)错误,核心原因和代码里的几处细节问题我帮你梳理清楚,一步步修正就能解决:

1. 先搞定404路由问题

你的forum应用里已经定义了like/的路由,但主项目的根URL配置没有包含forum应用的路由,导致Django找不到http://localhost:8000/forum/like/这个路径。

打开项目根目录的urls.py,添加对forum应用URL的引用:

from django.contrib import admin
from django.urls import path, include  # 确保导入include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('forum/', include('forum.urls')),  # 新增这一行,把forum的路由挂载到/forum/路径下
]

2. 修复视图里的两处代码错误

你的toggle_like视图有两个小问题,会导致功能异常:

  • json.dump是写入文件的方法,生成JSON字符串应该用json.dumps
  • question.likes.count是方法引用,需要加括号调用才能拿到实际数量:question.likes.count()

修正后的视图代码:

import json
from django.http import HttpResponse
from django.views.decorators.http import require_POST
from .models import Question
from django.shortcuts import get_object_or_404

@require_POST
def toggle_like(request):
    user = request.user
    slug = request.POST.get('slug', None)
    question = get_object_or_404(Question, slug=slug)
    
    if question.likes.filter(id=user.id).exists():
        question.likes.remove(user)
    else:
        question.likes.add(user)
    
    context = {'likes-count': question.likes.count()}
    return HttpResponse(json.dumps(context), content_type='application/json')

3. 修复前端JS的this指向问题

你用了箭头函数() => {},箭头函数不会绑定自身的this,导致$(this).attr('name')拿不到按钮的slug值。换成普通函数就能解决:

$('#like').click(function() {
    $.ajax({
        method: 'POST',
        url: "{% url 'forum:toggle-like' %}",
        data: {
            'slug': $(this).attr('name'),
            'csrfmiddlewaretoken': '{{ csrf_token }}'
        },
        dataType: 'json',
        success: (response) => {
            // 成功后更新页面上的点赞数,提升用户体验
            $('p:contains("Likes:")').text(`Likes: ${response['likes-count']}`);
            // 还可以切换按钮文本,比如变成"Unlike"
        },
        error: (response, error) => {
            alert(response.responseText);
        }
    })
})

另外注意:你之前的success回调里用了response.message,但视图返回的是likes-count,所以改成更新页面点赞数的逻辑更合理。

把这些修改完成后,点击点赞按钮就不会再出现404错误,也能正常实现无刷新点赞/取消点赞的功能了。

内容的提问来源于stack exchange,提问作者Felipe Netto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:46:40