错误:“字典更新序列元素#0的长度为1;在Django 1.4上需要2

时间:2023-02-06 02:28:03

I have a error message on django 1.4:

我在django 1.4上有一个错误消息:

dictionary update sequence element #0 has length 1; 2 is required

字典更新序列元素#0的长度为1;2是必需的

[EDIT]

(编辑)

It happened when I tried when using template tag like: `{% for v in values %}:

当我尝试使用模板标签时,例如:' {% for v in values %}:

dictionary update sequence element #0 has length 1; 2 is required

Request Method:     GET
Request URL:    ...
Django Version:     1.4.5
Exception Type:     ValueError
Exception Value:    

dictionary update sequence element #0 has length 1; 2 is required

Exception Location:     /usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__, line 21
Python Executable:  /usr/bin/uwsgi-core
Python Version:     2.7.3
Python Path:    

['/var/www/',
 '.',
 '',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/pymodules/python2.7']

Server time:    sam, 13 Jul 2013 16:15:45 +0200
Error during template rendering

In template /var/www/templates/app/index.html, error at line 172
dictionary update sequence element #0 has length 1; 2 is required

172     {% for product in products %}

Traceback Switch to copy-and-paste view

/usr/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response

                            response = callback(request, *callback_args, **callback_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/contrib/auth/decorators.py in _wrapped_view

                    return view_func(request, *args, **kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/views/decorators/http.py in inner

                return func(request, *args, **kwargs)

    ...
▶ Local vars
./app/views.py in index

            context_instance=RequestContext(request))

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/shortcuts/__init__.py in render_to_response

        return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader.py in render_to_string

            return t.render(context_instance)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                return self._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader_tags.py in render

            return compiled_parent._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader_tags.py in render

                result = block.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/defaulttags.py in render

            len_values = len(values)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/core/paginator.py in __len__

            return len(self.object_list)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/query.py in __len__

                    self._result_cache = list(self.iterator())

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/query.py in iterator

                        obj = model(*row[index_start:aggregate_start])

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/base.py in __init__

                    setattr(self, field.attname, val)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __set__

                value = self.field._attribute_class(value, self.field, obj)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__

            super(HStoreDictionary, self).__init__(value, **params)

    ...
▶ Local vars

It happens too when I try to access on a hstore queryset:

当我尝试访问hstore queryset时也会发生:

[edit]

(编辑)

Traceback (most recent call last):
File "manage.py", line 14, in <module>
    execute_manager(settings)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 459, in execute_manager
    utility.execute()

File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)

File "/home/name/workspace/project/app/data/commands/my_command.py", line 60, in handle
    item_id = tmp[0].id,

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 207, in __getitem__
    return list(qs)[0]

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 87, in __len__
    self._result_cache.extend(self._iter)

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 301, in iterator
    obj = model(*row[index_start:aggregate_start])

File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 300, in __init__
    setattr(self, field.attname, val)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 38, in __set__
    value = self.field._attribute_class(value, self.field, obj)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 21, in __init__
    super(HStoreDictionary, self).__init__(value, **params)

ValueError: dictionary update sequence element #0 has length 1; 2 is required

the code is:

的代码是:

tmp = Item.objects.where(HE("kv").contains({'key':value}))

if tmp.count() > 0:

    item_id = tmp[0].id,

I just try to access to the value I don't understand the "update sequence" message. When I use a cursor instead of hstore queryset the function works. The error come on template rendering too , I just restarted uwsgi and everything works well, but error come back later

我只是试图访问我不理解的值“更新序列”消息。当我使用游标而不是hstore queryset时,函数就可以工作了。错误也出现在模板渲染中,我刚刚重新启动uwsgi,一切都运行良好,但是错误稍后会回来

[edit]

(编辑)

Has someone an idea?

有人知道吗?

11 个解决方案

#1


261  

Just ran into this problem. I don't know if it's the same thing that hit your code, but for me the root cause was because I forgot to put name= on the last argument of the url function call.

刚遇到这个问题。我不知道它是否和你的代码相同,但对我来说,根本原因是我忘记在url函数调用的最后一个参数上写上name=。

For instance, the following throws the error from the question:

例如,下面从问题中抛出错误:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), 'foo')

But this actually works:

但实际上这个工作原理:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), name='foo')

The reason why the traceback is unhelpful is because internally, Django wants to parse the given positional argument as the keyword argument kwargs, and since a string is an iterable, an atypical code path begins to unfold. Always use name= on your urls!

回溯之所以没有帮助,是因为在内部,Django希望将给定的位置参数解析为关键字参数kwargs,并且由于字符串是可迭代的,因此将开始展开一个非典型的代码路径。总是在你的url上使用name= !

#2


20  

Error in your question is raised when you try something like following:

错误在你的问题是当你尝试类似:

>>> a_dictionary = {}
>>> a_dictionary.update([[1]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required

It's hard to tell where is the cause in your code unless you show your code, full traceback.

很难判断代码中的原因是什么,除非您显示您的代码,完整的回溯。

#3


10  

I faced the above mentioned problem when I forgot to pass a keyword argument name to url() function.

当我忘记将关键字参数名称传递给url()函数时,我遇到了上面提到的问题。

Code with error

代码和错误

 url(r"^testing/$", views.testing, "testing")

Code without error

代码没有错误

url(r"^testing/$", views.testing, name="testing")

So finally I removed the above error in this way. It might be something different in your case. So check your url patterns in urls.py.

最后我用这种方法去掉了上面的错误。你的情况可能有所不同。所以请检查url中的url模式。

#4


9  

Here is the reproduced error.

这是复制错误。

>>> d = {}
>>> d.update([(1,)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 
>>> d
{}
>>> 
>>> d.update([(1, 2)])
>>> d
{1: 2}
>>> 
>>> d.update('hello_some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>  
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 

If you give the sequence and any element length is 1 and required two then we will get this kind of error. See the above code. First time I gave the sequence with tuple and it's length 1, then we got the error and dictionary is not updated. second time I gave inside tuple with with two elements, dictionary got updated.

如果你给序列任何元素的长度都是1并且需要两个那么我们就会得到这种误差。看到上面的代码。我第一次给出带有tuple的序列,它的长度是1,然后我们得到了错误,字典没有更新。第二次我给了带两个元素的内元组,字典被更新了。

#5


5  

Solution»

Pass a keyword argument name with value as your view name e.g home or home-view etc. to url() function.

传递一个带值的关键字参数名作为视图名e。g home或home view等到url()函数。

Throws Error»

url(r'^home$', 'common.views.view1', 'home'),

url(r ' ^家美元”、“common.views。view1”、“家”),

Correct»

url(r'^home$', 'common.views.view1', name='home'),

url(r ' ^家美元”、“common.views。view1’,名字= '家'),

#6


3  

I got the same issue and found that it was due to wrong parameters. In views.py, I used:

我得到了同样的问题,发现是由于错误的参数。在视图。py,我使用:

return render(request, 'demo.html',{'items', items})    

But I found the issue: {'items', items}. Changing to {'items': items} resolved the issue.

但我发现了问题:{‘项目’,项目}。更改为{'items': items}解决了这个问题。

#7


2  

I got this error when I was messing around with string and dictionary.

我在使用字符串和字典时犯了这个错误。

dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required

So what you actually got to do to get dict from string is:

所以你要做的就是从字符串中获取命令

dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}

#8


1  

You are sending one parameter incorrectly; it should be a dictionary object:

您错误地发送了一个参数;它应该是一个字典对象:

  • Wrong: func(a=r)

    错误:func(= r)

  • Correct: func(a={'x':y})

    正确的:func(= {“x”:y })

#9


1  

In my case, my get_context_data in one of my views was returning return render(self.request, 'es_connection_error.html', {'error':error}); in a try/catch block instead of returning context

在我的例子中,我的一个视图中的get_context_data返回return render(self)。请求,“es_connection_error。html的,{错误:错误});在try/catch块中而不是返回上下文

#10


1  

The error should be with the params. Please verify that the params is a dictionary object. If it is just a list/tuple of arguments use only one * (*params) instead of two * (**params). This will explode the list/tuple into the proper amount of arguments.

错误应该与参数有关。请验证params是一个dictionary对象。如果只是一个参数列表/元组,则只使用一个* (*params)而不是两个* (** *params)。这会将列表/元组分解成适当数量的参数。

Or, if the params is coming from some other part of code as a JSON file, please do json.loads(params), because the JSON objects sometimes behave as string and so you need to make it as a JSON using load from string (loads).

或者,如果params作为JSON文件来自代码的其他部分,请执行JSON .load (params),因为JSON对象有时表现为字符串,因此需要使用string (load)的load使其成为JSON。

super(HStoreDictionary, self).__init__(value, **params)

Hope this helps!

希望这可以帮助!

#11


0  

I encountered this issue when trying to invoke the update method with a parameter of a wrong type. The expected dict was:

我在尝试使用错误类型的参数调用update方法时遇到了这个问题。预期的dict类型是:

{'foo': True}

The one that was passed was:

通过的是:

{'foo': "True"}

make sure you check all the parameters you pass are of the expected type.

确保您检查传递的所有参数都是预期的类型。

#1


261  

Just ran into this problem. I don't know if it's the same thing that hit your code, but for me the root cause was because I forgot to put name= on the last argument of the url function call.

刚遇到这个问题。我不知道它是否和你的代码相同,但对我来说,根本原因是我忘记在url函数调用的最后一个参数上写上name=。

For instance, the following throws the error from the question:

例如,下面从问题中抛出错误:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), 'foo')

But this actually works:

但实际上这个工作原理:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), name='foo')

The reason why the traceback is unhelpful is because internally, Django wants to parse the given positional argument as the keyword argument kwargs, and since a string is an iterable, an atypical code path begins to unfold. Always use name= on your urls!

回溯之所以没有帮助,是因为在内部,Django希望将给定的位置参数解析为关键字参数kwargs,并且由于字符串是可迭代的,因此将开始展开一个非典型的代码路径。总是在你的url上使用name= !

#2


20  

Error in your question is raised when you try something like following:

错误在你的问题是当你尝试类似:

>>> a_dictionary = {}
>>> a_dictionary.update([[1]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required

It's hard to tell where is the cause in your code unless you show your code, full traceback.

很难判断代码中的原因是什么,除非您显示您的代码,完整的回溯。

#3


10  

I faced the above mentioned problem when I forgot to pass a keyword argument name to url() function.

当我忘记将关键字参数名称传递给url()函数时,我遇到了上面提到的问题。

Code with error

代码和错误

 url(r"^testing/$", views.testing, "testing")

Code without error

代码没有错误

url(r"^testing/$", views.testing, name="testing")

So finally I removed the above error in this way. It might be something different in your case. So check your url patterns in urls.py.

最后我用这种方法去掉了上面的错误。你的情况可能有所不同。所以请检查url中的url模式。

#4


9  

Here is the reproduced error.

这是复制错误。

>>> d = {}
>>> d.update([(1,)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 
>>> d
{}
>>> 
>>> d.update([(1, 2)])
>>> d
{1: 2}
>>> 
>>> d.update('hello_some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>  
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 

If you give the sequence and any element length is 1 and required two then we will get this kind of error. See the above code. First time I gave the sequence with tuple and it's length 1, then we got the error and dictionary is not updated. second time I gave inside tuple with with two elements, dictionary got updated.

如果你给序列任何元素的长度都是1并且需要两个那么我们就会得到这种误差。看到上面的代码。我第一次给出带有tuple的序列,它的长度是1,然后我们得到了错误,字典没有更新。第二次我给了带两个元素的内元组,字典被更新了。

#5


5  

Solution»

Pass a keyword argument name with value as your view name e.g home or home-view etc. to url() function.

传递一个带值的关键字参数名作为视图名e。g home或home view等到url()函数。

Throws Error»

url(r'^home$', 'common.views.view1', 'home'),

url(r ' ^家美元”、“common.views。view1”、“家”),

Correct»

url(r'^home$', 'common.views.view1', name='home'),

url(r ' ^家美元”、“common.views。view1’,名字= '家'),

#6


3  

I got the same issue and found that it was due to wrong parameters. In views.py, I used:

我得到了同样的问题,发现是由于错误的参数。在视图。py,我使用:

return render(request, 'demo.html',{'items', items})    

But I found the issue: {'items', items}. Changing to {'items': items} resolved the issue.

但我发现了问题:{‘项目’,项目}。更改为{'items': items}解决了这个问题。

#7


2  

I got this error when I was messing around with string and dictionary.

我在使用字符串和字典时犯了这个错误。

dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required

So what you actually got to do to get dict from string is:

所以你要做的就是从字符串中获取命令

dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}

#8


1  

You are sending one parameter incorrectly; it should be a dictionary object:

您错误地发送了一个参数;它应该是一个字典对象:

  • Wrong: func(a=r)

    错误:func(= r)

  • Correct: func(a={'x':y})

    正确的:func(= {“x”:y })

#9


1  

In my case, my get_context_data in one of my views was returning return render(self.request, 'es_connection_error.html', {'error':error}); in a try/catch block instead of returning context

在我的例子中,我的一个视图中的get_context_data返回return render(self)。请求,“es_connection_error。html的,{错误:错误});在try/catch块中而不是返回上下文

#10


1  

The error should be with the params. Please verify that the params is a dictionary object. If it is just a list/tuple of arguments use only one * (*params) instead of two * (**params). This will explode the list/tuple into the proper amount of arguments.

错误应该与参数有关。请验证params是一个dictionary对象。如果只是一个参数列表/元组,则只使用一个* (*params)而不是两个* (** *params)。这会将列表/元组分解成适当数量的参数。

Or, if the params is coming from some other part of code as a JSON file, please do json.loads(params), because the JSON objects sometimes behave as string and so you need to make it as a JSON using load from string (loads).

或者,如果params作为JSON文件来自代码的其他部分,请执行JSON .load (params),因为JSON对象有时表现为字符串,因此需要使用string (load)的load使其成为JSON。

super(HStoreDictionary, self).__init__(value, **params)

Hope this helps!

希望这可以帮助!

#11


0  

I encountered this issue when trying to invoke the update method with a parameter of a wrong type. The expected dict was:

我在尝试使用错误类型的参数调用update方法时遇到了这个问题。预期的dict类型是:

{'foo': True}

The one that was passed was:

通过的是:

{'foo': "True"}

make sure you check all the parameters you pass are of the expected type.

确保您检查传递的所有参数都是预期的类型。