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

Django提交创建文章表单时出现MultiValueDictKeyError错误如何解决?

解决Django提交表单时的MultiValueDictKeyError: "'title'"问题

这个错误本质上是Django找不到POST请求里的'title'字段,哪怕你已经给输入框加了name="title",咱们一步步来排查解决:

1. 先确认前端是否真的发送了title数据

这是最关键的一步,别光看模板代码,要实际验证浏览器发送的请求:

  • 打开浏览器开发者工具(F12),切换到「Network」标签
  • 点击表单的「Publish」按钮提交
  • 在Network列表里找到对应的POST请求,点击后查看「Form Data」部分
  • 如果这里没有title字段,说明前端模板的修改没生效:
    • 强制刷新页面(Ctrl+F5),清除浏览器缓存,确保加载最新的模板
    • 右键查看页面源代码,确认输入框的HTML里确实存在name="title"属性

2. 用更安全的方式获取POST数据

直接用request.POST['title']的问题在于,如果字段缺失会直接抛出异常,推荐用get()方法,这样即使字段不存在也只会返回None,还能设置默认值,同时可以添加输入验证:
修改views.py里的POST处理逻辑:

elif request.method == "POST":
    title = request.POST.get('title', '').strip()
    content = request.POST.get('content', '').strip()
    # 验证输入是否为空
    if not title or not content:
        context = {'b': block, 'error_msg': '标题和内容不能为空!'}
        return render(request, "article/create_article.html", context)
    # 注意:Article模型里的author字段是必填项,当前代码没赋值会触发数据库错误!
    article = Article(
        block=block, 
        title=title, 
        content=content, 
        status=0,
        author="默认作者"  # 建议从登录用户获取,比如request.user.username
    )
    article.save()
    return redirect(f"article/list/{ block_id }")

3. 检查模板和路由的匹配

  • 避免硬编码表单action路径,用Django的url标签生成更可靠:
    把模板里的action改成:
    <form class="form-horizontal" action="{% url 'create_article' b.id %}" method="POST">
    
    同时在urls.py里给路由命名:
    from django.urls import path
    from . import views
    
    urlpatterns = [
        # 其他路由...
        path('article/create/<int:block_id>/', views.create_article, name='create_article'),
        path('article/list/<int:block_id>/', views.article_list, name='article_list'),
    ]
    
  • 如果是生产环境,Django会缓存模板,修改后需要重启服务才能生效。

4. 排查是否有JS干扰表单提交

如果页面里有自定义JavaScript代码,可能会阻止表单默认提交行为或修改表单数据,导致title字段没被发送。可以暂时禁用页面JS,测试提交是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:07