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

Django上下文处理器表单保存后重定向失败及报错排查

问题原因分析

报错dictionary update sequence element #0 has length 0; 2 is required的根源在于上下文处理器函数返回了响应对象而非字典。Django上下文处理器强制要求返回字典,用于补充模板上下文数据。你的main上下文处理器在表单验证通过时返回了redirect响应,Django尝试将这个响应对象当作字典处理,从而触发类型不匹配的错误。

修复方案

把表单提交的处理逻辑从上下文处理器移到视图函数中,上下文处理器仅负责提供静态页面数据。

1. 修改上下文处理器代码

只保留静态页面数据查询,删除表单处理逻辑:

from .models import StaticPages

def main(request):
    pages = StaticPages.objects.all()
    return {
        'pages': pages
    }

2. 在视图函数中添加表单处理逻辑

修改core/views.py中的MainDashBoard函数,加入表单的GET/POST处理逻辑:

from django.shortcuts import render, redirect
from django.urls import reverse
from .forms import ContactForm
from service.models import Service
from product.models import Product

def MainDashBoard(request):
    service = Service.objects.all()
    products = Product.objects.all()
    
    if request.method == 'POST':
        contactform = ContactForm(request.POST)
        if contactform.is_valid():
            contactform.save()
            return redirect(reverse('index'))
    else:
        contactform = ContactForm()
    
    context = {
        'service': service,
        'products': products,
        'contactform': contactform
    }
    return render(request, "MainDashBoard.html", context=context)

3. 验证修复效果

调整后,表单提交验证通过后会正确触发重定向,上下文处理器也会正常返回字典数据,不会再出现类型不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:30:54