2

我正在使用 ajax 和 django 来动态填充组合框。ajax 组件工作得非常好,它将数据解析到视图中,但是在视图中,当我使用 spiting 函数时,它给了我一个名为“Value Error:need more than 1 value to unpack”的异常。谁能帮我找出错误:) :) 代码:

def dropdownPopulate(request):



if request.method=='POST' :
    key = request.POST['id']
else:
    key=""



level, tree_id=key.split(",")

next_nodes=Structure.objects.filter(tree_id=key[tree_id]).filter(level=key[level])
context={'name':next_nodes}     
return render_to_response('renderAjax.html',context)    
4

3 回答 3

1

这是因为s.split(',')正在返回长度列表1

level, tree_id = key.split(',')

确保它返回长度列表2

parts = key.split(',')
if len(parts) == 2:
    level, tree_id = parts
elif len(parts) == 1:
    level = parts[0]
    tree_id = None
else:
    # do something
    level = tree_id = None
    pass

像这样的应用过滤器:

next_nodes = Structure.objects.all()
if level:
    next_nodes = next_nodes.filter(level=level)
if tree_id:
    next_nodes = next_nodes.filter(tree_id=tree_id)
于 2013-05-15T10:44:24.680 回答
0

此行可能发生错误:

level, tree_id=key.split(",")

需要处理的情况,什么时候key没有","。或者它可能会有不止一个","

看看你的代码:

if request.method=='POST' :
    key = request.POST['id']
else:
    key=""

有可能,这key将是一个空白字符串。

以下是可能发生错误的示例:

1.

>>> key = ""
>>> level, tree_id=key.split(",")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

2.

>>> key = "a,b,c"
>>> level, tree_id=key.split(",")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

只有这样就可以了(当它只有一个时","):

>>> key = "a,b"
>>> level, tree_id=key.split(",")
>>> 
于 2013-05-15T10:45:20.603 回答
0

你有多个问题。

级别,tree_id=key.split(",")

这将失败,因为key可能没有,,所以split不会返回 2 个值。

next_nodes=Structure.objects.filter(tree_id=key[tree_id]).filter(level=key[level])

在这里,您key作为 dict 访问,这是不正确的,因为它是字符串。

于 2013-05-15T10:46:07.910 回答