Django中传入指定ID的URL出现404页面未找到错误
问题分析与解决方案
一、404错误的可能原因及排查步骤
1. URL路由未正确配置
- 检查项目根目录的
urls.py是否正确包含了该路由所在的应用URL配置。例如,如果该路由在myapp/urls.py中,根urls.py需要有类似如下配置:from django.urls import path, include urlpatterns = [ # 其他路由... path('', include('myapp.urls')), # 确保没有额外前缀,否则访问URL需要加上前缀(如/api/likecomment/6/) ] - 确认路由定义顺序:如果有其他路由(比如
path('likecomment/', ...))在该re_path之前,虽不会匹配/likecomment/6/,但仍需确保当前路由是第一个能匹配目标URL的规则。
2. 模型引用错误
- 检查视图中
Comment模型的导入是否正确,确保是从对应应用的models.py导入,而非其他同名模型:# 正确导入示例(假设Comment在comments应用中) from comments.models import Comment - 通过Django Shell直接查询验证对象是否存在:
python manage.py shellfrom your_app.models import Comment Comment.objects.get(id=6) # 如果报错说明对象确实不存在,否则说明视图查询逻辑有问题
3. 路由参数传递异常
- 临时在视图开头添加打印语句,确认
comment_id是否正确接收:def LikeComment_view(request, comment_id): print("Received comment_id:", comment_id) # 检查控制台输出是否为6 comment = get_object_or_404(Comment, id=comment_id) # 后续代码...
二、视图函数中的逻辑错误(非404原因,但需修复)
即使解决了404问题,当前视图代码仍会抛出AttributeError,因为模型中定义的多对多字段是liked_users,而视图中错误使用了comment.liked(liked是User模型的反向关联名)。修复如下:
def LikeComment_view(request, comment_id): comment = get_object_or_404(Comment, id=comment_id) # 替换comment.liked为comment.liked_users if not comment.liked_users.filter(id=request.user.id).exists(): comment.likes += 1 comment.liked_users.add(request.user) comment.save() else: comment.likes -= 1 comment.liked_users.remove(request.user) comment.save()
三、额外优化建议
- 建议使用
path而非re_path简化路由定义(Django 2.0+支持):path('likecomment/<int:comment_id>/', LikeComment_view, name="LikeComment_page"), - 避免手动维护
likes字段计数,可通过信号或直接查询liked_users.count()获取实时点赞数,减少数据不一致风险。
内容的提问来源于stack exchange,提问作者Alireza javanpour
相关产品推荐
相关产品推荐

