Django模板语法错误:值过多无法解包

4 投票
1 回答
3529 浏览
提问于 2025-04-15 18:06

我在使用Django的表单,里面有一个选择字段。我觉得问题可能出在选择项是动态获取的,现在只有一个值。我遇到了一个错误,叫做TemplateSyntaxError: too many values to unpack。有些其他的帖子说只有一个值可能会出问题,所以我调整了获取选择项的函数,试着在开头加了一个空选项,作为测试。但是这又出现了另一个错误:need more than 0 values to unpack

我不太确定该怎么处理这个问题,因为即使只有一个值,我也希望它能正常执行。

表单:

class UploadFileForm(forms.Form):
    category = forms.ChoiceField(get_category_list())
    file = forms.FileField()

获取分类的函数:

def get_category_list():
    cats = [(), ()]
    for i in os.listdir(settings.MEDIA_ROOT + '/forms'):
        cats.append(i)
    return cats

模板部分:

<div id='addformdialog' title='Add Form'>
    {{ form.as_p }}
</div>

视图:

def fm(request):
    if request.session['SecurityLevel'] != 2:
        return HttpResponse('Access Denied!')

    if request.method == 'POST':
        form = UpoadFileForm(request.POST, request.FILES)
        if form.is_valid():
            destination = open(settings.MEDIA_ROOT + "/forms/" + request.POST['category'] + "/" + request.FILES['file'].name, 'wb+')
            for chunk in request.FILES['file'].chunks():
                destination.write(chunk)
            destination.close()
            form = UploadFileForm()
            return render_to_response('admin/fm.html', {'categories':cats, 'form':form, 'uploadsuccess':True})
    else:
        cats = get_category_list()
        form = UploadFileForm()
        return render_to_response('admin/fm.html', {'categories':cats, 'form':form})

1 个回答

6

choices 应该是一个包含二元组的可迭代对象。你现在只是添加了一个单独的字符串,这样会导致一些混乱,因为字符串和二元组的处理方式不同(如果你真的想知道,我可以给你详细解释)。请改为添加二元组。

撰写回答