Eu tenho uma mensagem de erro no django 1.4:
o elemento de sequência de atualização de dicionário # 0 tem comprimento 1; 2 é obrigatório
[EDITAR]
Aconteceu quando tentei usar uma tag de modelo como: `{% 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
Isso acontece também quando tento acessar um conjunto de consultas hstore:
[editar]
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
o código é:
tmp = Item.objects.where(HE("kv").contains({'key':value}))
if tmp.count() > 0:
item_id = tmp[0].id,
Eu só estou tentando acessar o valor. Não entendo a mensagem "sequência de atualização". Quando eu uso um cursor em vez de hstore queryset, a função funciona. O erro também ocorre na renderização do modelo. Acabei de reiniciar uwsgi
e tudo funciona bem, mas o erro volta mais tarde.
[editar]
Alguém tem uma ideia?
values
etmp
. Enquanto o código estiver ausente, -1 (possivelmente temporário) para esta pergunta.dict(['A',"b"])
Enquanto isso nãodict([('A',"b")])
Respostas:
Acabei de encontrar este problema. Não sei se foi a mesma coisa que atingiu seu código, mas para mim a causa principal foi porque esqueci de colocar
name=
o último argumento da chamada de funçãourl
(oupath
no Django 2.0+).Por exemplo, as seguintes funções lançam o erro da pergunta:
Mas estes realmente funcionam:
A razão pela qual o traceback é inútil é porque internamente, o Django deseja analisar o argumento posicional fornecido como o argumento da palavra - chave
kwargs
e, como uma string é iterável, um caminho de código atípico começa a se desdobrar. Sempre usename=
em seus URLs!fonte
Router.register
método do Django RestFramework. Parece muito parecido, a diferença é oname
kwarg ...path
URL do estilo Django 2.0 . Esqueceu-se de usar o kwarg e tinha a seguinte:path('foo/', views.foo, 'foo')
. Eu tive que mudar parapath('foo/', views.foo, name='foo')
Eu recebi esse erro quando estava brincando com string e dicionário.
Então, o que você realmente precisa fazer para obter o dict da string é:
Ou em questão de segurança, podemos usar literal_eval
fonte
O erro na sua pergunta é gerado quando você tenta algo como o seguinte:
É difícil dizer qual é a causa do seu código, a menos que você mostre seu código, rastreamento completo.
fonte
Eu enfrentei o problema acima mencionado quando esqueci de passar um nome de argumento de palavra-chave para a função url ().
Código com erro
Código sem erro
Então, finalmente, removi o erro acima dessa maneira. Pode ser algo diferente no seu caso. Portanto, verifique seus padrões de URL em urls.py .
fonte
Solução"
Passe um nome de argumento de palavra-chave com valor como seu nome de exibição, por exemplo,
home
ouhome-view
etc., paraurl()
funcionar.Lança erro »
url(r'^home$', 'common.views.view1', 'home'),
Corrigir"
url(r'^home$', 'common.views.view1', name='home'),
fonte
Aqui está o erro reproduzido.
Se você fornecer a sequência e qualquer comprimento de elemento for 1 e for necessário dois, obteremos esse tipo de erro. Veja o código acima. A primeira vez que dei a sequência com tupla e seu comprimento 1, obtivemos o erro e o dicionário não é atualizado. segunda vez que dei dentro da tupla com dois elementos, o dicionário foi atualizado.
fonte
Eu peguei o mesmo problema e achei que era devido a parâmetros incorretos. Em
views.py
, eu usei:Mas eu encontrei o problema:
{'items', items}
. Alterando para{'items': items}
resolver o problema.fonte
No meu caso, meu
get_context_data
em uma das minhas visualizações estava retornandoreturn render(self.request, 'es_connection_error.html', {'error':error});
em um bloco try / catch em vez de retornarcontext
fonte
O erro deve estar com os parâmetros. Verifique se os parâmetros são um objeto de dicionário . Se for apenas uma lista / tupla de argumentos, use apenas um * (
*params
) em vez de dois * (**params
). Isso explodirá a lista / tupla na quantidade adequada de argumentos.Ou, se os params vierem de alguma outra parte do código como um arquivo JSON, faça-o
json.loads(params)
, porque os objetos JSON às vezes se comportam como string e, portanto, você precisa torná-lo como um JSON usando load from string (load).Espero que isto ajude!
fonte
Encontrei esse problema ao tentar invocar o método de atualização com um parâmetro de um tipo errado. O ditado esperado era:
O que foi aprovado foi:
verifique se todos os parâmetros que você passa são do tipo esperado.
fonte
Você está enviando um parâmetro incorretamente; deve ser um
dictionary object
:Errado:
func(a=r)
Corrigir:
func(a={'x':y})
fonte
Eu também tive um tipo semelhante de problema. A solução é simples. apenas não tente digitar o valor NULL ou None nos valores ou você pode ter que usar algo como isto
dic.update([(key,value)])
fonte