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

点击创建新帖按钮报错:service.views.create_post未返回HttpResponse

错误原因与修复方案

问题根源

这个错误的核心是:Django视图函数必须始终返回一个HttpResponse对象,但你的create_post视图在处理GET请求时,没有返回任何内容,函数执行到最后返回了None。

看代码逻辑:

  • 当用户点击“创建新帖子”(发起GET请求),视图仅初始化了form = PostForm(),但没有后续的return语句来返回渲染表单的页面。
  • 只有POST请求的分支里有return语句,GET请求走到函数末尾就默认返回None,触发了报错。

修复代码

修改后的create_post视图需要确保所有请求路径都有返回值,在函数末尾添加GET请求对应的返回逻辑:

@login_required
@permission_required("service.add_post")
def create_post(req):
    form = PostForm()
    if req.method == "POST":
        form = PostForm(req.POST)
        if form.is_valid():
            form.save()
            title = form.cleaned_data.get("title")
            if title != "POST":
                messages.error(req, f"Something went wrong")
                return redirect('index')
            # 注意:form.cleaned_data里没有pk,刚保存的对象主键需从实例获取
            post = form.save()
            messages.success(req, f"Post {title} was created successfully")
            return redirect('index')
        # POST请求但表单验证失败,返回带错误的表单页面
        return render(req, "create_post.html", {"form":form})
    # GET请求,返回空表单页面
    return render(req, "create_post.html", {"form":form})

额外提示

代码里的id = form.cleaned_data.get("pk")是无效的——cleaned_data里不会包含pk(主键是数据库自动生成的,不属于表单提交字段),如果需要获取新建帖子的主键,应该用post = form.save(),然后通过post.pk获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:20:28