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

Django中用ID而非Slug时评论链接出现404错误求助

解决Django评论功能的404和代码错误问题

我来帮你排查几个关键问题,这些应该就是导致404报错和功能失效的原因:

1. URL配置的语法混用错误

你在films/urls.py里混用了url()和path()的语法,这是导致URL匹配失败的核心问题:

  • url()函数需要使用正则表达式,而<int:film_id>是path()专属的路径转换器语法,不能直接用在url()里。
  • 推荐统一使用Django 2.0+推荐的path()来配置URL,保持语法一致性。

修正后的films/urls.py:

from django.urls import path
from . import views

app_name = 'films'
urlpatterns = [
    path('', views.index, name='index'),
    # 用path()替代错误的url()写法,语法正确匹配film_id
    path('films/<int:film_id>/comment/', views.add_comment, name='add_comment'),
    path('films/<int:film_id>/', views.detail, name='detail'),
]

2. Views中的代码逻辑错误

你的add_comment视图里有两处致命错误,会导致即使URL匹配成功也报错:

  • 未定义的post变量:你写了comment.post = post,但代码里根本没有定义post,应该关联到当前获取的film对象(假设你的Comment模型外键字段是film)。
  • Redirect的命名空间和参数错误:命名空间写成了film:detail,但你的app_name是films;而且redirect不能直接传对象,需要传主键参数。

修正后的films/views.py:

from django.shortcuts import get_object_or_404, redirect, render
from .models import Film
from .forms import CommentForm

def add_comment(request, film_id):
    film = get_object_or_404(Film, pk=film_id)
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            # 修正:将评论关联到当前电影对象
            comment.film = film
            comment.save()
            # 修正命名空间为films,并传递film_id参数
            return redirect('films:detail', film_id=film_id)
    else:
        form = CommentForm()
    template = 'films/add_comment.html'
    # 把film传入上下文,方便模板后续扩展使用
    context = {'form': form, 'film': film}
    return render(request, template, context)

3. 验证模板链接

你的模板链接写法是正确的:

<a href="{% url 'films:add_comment' film.id %}">Leave a comment</a>

只要你的电影对象film存在,这个标签会生成正确的URL(比如/films/2/comment/)。

最后验证步骤

  1. 重启Django开发服务器(避免缓存旧的URL配置)
  2. 点击"Leave a comment"链接,或者手动输入http://127.0.0.1:8000/films/2/comment/
  3. 提交评论后,应该会正确跳转到电影详情页

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:41:48