Tengo un mensaje de error en django 1.4:
el elemento de secuencia de actualización del diccionario # 0 tiene longitud 1; Se requiere 2
[EDITAR]
Sucedió cuando intenté usar una etiqueta de plantilla 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
También sucede cuando intento acceder en un 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
el código es:
tmp = Item.objects.where(HE("kv").contains({'key':value}))
if tmp.count() > 0:
item_id = tmp[0].id,
Solo estoy tratando de acceder al valor. No entiendo el mensaje "secuencia de actualización". Cuando uso un cursor en lugar de hstore queryset, la función funciona. El error también se produce en el renderizado de plantillas. Acabo de reiniciaruwsgi
y todo funciona bien, pero el error vuelve más tarde.
[editar]
¿Alguien tiene una idea?
values
ytmp
. Mientras falta el código, -1 (posiblemente temporal) para esta pregunta.dict(['A',"b"])
mientras esto no lo hacedict([('A',"b")])
Respuestas:
Acabo de encontrarme con este problema. No sé si es lo mismo que golpeó su código, pero para mí la causa raíz fue porque olvidé poner
name=
el último argumento de laurl
(opath
llamada a la función en Django 2.0+).Por ejemplo, las siguientes funciones arrojan el error de la pregunta:
Pero estos realmente funcionan:
La razón por la cual el rastreo no es útil es porque internamente, Django quiere analizar el argumento posicional dado como argumento de palabra clave
kwargs
, y dado que una cadena es iterable, una ruta de código atípica comienza a desarrollarse. ¡Úselo siemprename=
en sus URL!fuente
Router.register
método de Django RestFramework. Se ve muy similar, la diferencia es elname
kwarg ...path
URL de estilo Django 2.0 . Se olvidó de usar el kwarg y tenía la siguiente:path('foo/', views.foo, 'foo')
. Tuve que cambiar apath('foo/', views.foo, name='foo')
Recibí este error cuando estaba jugando con la cadena y el diccionario.
Entonces, lo que tienes que hacer para obtener dict de string es:
O en materia de seguridad podemos usar literal_eval
fuente
Se produce un error en su pregunta cuando intenta algo como lo siguiente:
Es difícil saber dónde está la causa en su código a menos que muestre su código, rastreo completo.
fuente
Me enfrenté al problema mencionado anteriormente cuando olvidé pasar un nombre de argumento de palabra clave a la función url ().
Código con error
Código sin error
Así que finalmente eliminé el error anterior de esta manera. Puede ser algo diferente en su caso. A fin de comprobar sus patrones de URL en urls.py .
fuente
Solución"
Pase un nombre de argumento de palabra clave con valor como su nombre de vista, por ejemplo,
home
ohome-view
etc., aurl()
funcione.Lanza Error »
url(r'^home$', 'common.views.view1', 'home'),
Correcto"
url(r'^home$', 'common.views.view1', name='home'),
fuente
Aquí está el error reproducido.
Si proporciona la secuencia y la longitud de cualquier elemento es 1 y requiere dos, obtendremos este tipo de error. Ver el código de arriba. La primera vez que le di la secuencia con tupla y es de longitud 1, recibimos el error y el diccionario no se actualiza. La segunda vez que di tupla interior con dos elementos, el diccionario se actualizó.
fuente
Tuve el mismo problema y descubrí que se debía a parámetros incorrectos. En
views.py
, usé:Pero me encontré con el tema:
{'items', items}
. Cambiando para{'items': items}
resolver el problema.fuente
En mi caso, mi
get_context_data
en una de mis vistas estaba regresandoreturn render(self.request, 'es_connection_error.html', {'error':error});
en un bloque try / catch en lugar de regresarcontext
fuente
El error debería estar con los params. Verifique que los parámetros sean un objeto de diccionario . Si es solo una lista / tupla de argumentos, use solo un * (
*params
) en lugar de dos * (**params
). Esto explotará la lista / tupla en la cantidad adecuada de argumentos.O bien, si los parámetros provienen de otra parte del código como un archivo JSON, hágalo
json.loads(params)
, porque los objetos JSON a veces se comportan como una cadena y, por lo tanto, debe hacerlo como JSON utilizando la carga de la cadena (cargas).¡Espero que esto ayude!
fuente
Encontré este problema al intentar invocar el método de actualización con un parámetro de un tipo incorrecto. El dict esperado era:
El que se aprobó fue:
asegúrese de verificar que todos los parámetros que pasa son del tipo esperado.
fuente
Estás enviando un parámetro incorrectamente; debería ser un
dictionary object
:Incorrecto:
func(a=r)
Correcto:
func(a={'x':y})
fuente
Yo también tuve un tipo de problema similar. La solución es simple. simplemente no intente ingresar un valor NULL o None en los valores o podría tener que usar algo como esto
dic.update([(key,value)])
fuente