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.
确保您检查传递的所有参数都是预期的类型。