Ich habe eine Fehlermeldung zu Django 1.4:
wörterbuchaktualisierungssequenzelement # 0 hat Länge 1; 2 ist erforderlich
[BEARBEITEN]
Es passierte, als ich es mit dem Template-Tag versuchte: {% 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
Es passiert auch, wenn ich versuche, auf ein Hstore-Abfrageset zuzugreifen:
[bearbeiten]
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
der Code lautet:
tmp = Item.objects.where(HE("kv").contains({'key':value}))
if tmp.count() > 0:
item_id = tmp[0].id,
Ich versuche nur auf den Wert zuzugreifen, den ich nicht verstanden habe. Wenn ich einen Cursor anstelle von hstore queryset verwende, funktioniert die Funktion. Der Fehler kam auch beim Template-Rendering, ich habe gerade uwsgi
neu gestartet und alles funktioniert gut, aber der Fehler kommt später wieder
[bearbeiten]
Hat jemand eine Idee?
Ich bin gerade auf dieses Problem gestoßen. Ich weiß nicht, ob es das gleiche ist, das Ihren Code traf, aber für mich war die Hauptursache, dass ich vergessen habe, name=
auf das letzte Argument des Funktionsaufrufs url
zu setzen.
Das folgende Beispiel wirft den Fehler aus der Frage:
url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), 'foo')
Das funktioniert aber eigentlich:
url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), name='foo')
Der Grund, warum Traceback nicht hilfreich ist, liegt darin, dass Django intern das angegebene Argument positional als das Schlüsselwort Argument kwargs
parst. Da ein String eine Iteration ist, beginnt sich ein atypischer Codepfad zu entfalten. Verwenden Sie immer name=
für Ihre URLs!
Ein Fehler in Ihrer Frage wird ausgelöst, wenn Sie Folgendes versuchen:
>>> 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
Es ist schwer zu sagen, wo die Ursache in Ihrem Code liegt, es sei denn, Sie zeigen Ihren Code vollständig zurück.
Ich hatte das oben genannte Problem, als ich vergessen hatte, ein Schlüsselwortargument name an die Funktion url () zu übergeben.
Code mit Fehler
url(r"^testing/$", views.testing, "testing")
Code ohne Fehler
url(r"^testing/$", views.testing, name="testing")
So habe ich schließlich den obigen Fehler behoben. In Ihrem Fall könnte es etwas anderes sein. Überprüfen Sie also Ihre URL-Muster in urls.py .
Übergeben Sie ein Schlüsselwortargument name mit dem Wert Ihres Ansichtsnamens, z. B. home
oder home-view
Usw. an url()
function.
url(r'^home$', 'common.views.view1', 'home'),
url(r'^home$', 'common.views.view1', name='home'),
Ich habe diesen Fehler bekommen, als ich mit String und Wörterbuch herumgespielt habe.
dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required
Was Sie also wirklich tun müssen, um Diktate von String zu erhalten, ist:
dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}
Hier ist der reproduzierte Fehler.
>>> 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
>>>
Wenn Sie die Reihenfolge angeben und jedes Element 1 ist und zwei, dann werden wir diese Art von Fehler erhalten. Siehe obigen Code. Zum ersten Mal habe ich die Sequenz mit Tuple und der Länge 1 angegeben, dann haben wir den Fehler und das Wörterbuch wurde nicht aktualisiert. Zum zweiten Mal gab ich Tuple mit zwei Elementen, das Wörterbuch wurde aktualisiert.
Ich bekam das gleiche Problem und stellte fest, dass es sich um falsche Parameter handelte. In views.py
verwendete ich:
return render(request, 'demo.html',{'items', items})
Aber ich habe das Problem gefunden: {'items', items}
. Das Ändern von {'items': items}
hat das Problem behoben.
In meinem Fall gab mein get_context_data
in einer meiner Ansichten return render(self.request, 'es_connection_error.html', {'error':error});
in einem try/catch-Block zurück, anstatt context
zurückzugeben.
Der Fehler sollte bei den Params liegen. Bitte überprüfen Sie, ob es sich bei den Parametern um ein Wörterbuchobjekt handelt . Wenn es sich nur um eine Liste/einen Tupel von Argumenten handelt, verwenden Sie nur ein * (*params
) anstelle von zwei * (**params
). Dadurch wird die Liste/Tuple in die richtige Anzahl von Argumenten aufgelöst.
Wenn die Parameter aus einem anderen Teil des Codes als JSON-Datei stammen, führen Sie bitte json.loads(params)
aus, da sich die JSON-Objekte manchmal als Zeichenfolge verhalten und daher als JSON mit load from string (load) erstellt werden müssen.
super(HStoreDictionary, self).__init__(value, **params)
Hoffe das hilft!
Dieses Problem ist aufgetreten, als versucht wurde, die Aktualisierungsmethode mit einem Parameter eines falschen Typs aufzurufen. Die folgende Bedingung war:
{'foo': True}
Der, der bestanden wurde, war:
{'foo': "True"}
stellen Sie sicher, dass alle Parameter, die Sie übergeben, dem erwarteten Typ entsprechen.
Sie senden einen Parameter falsch. es sollte ein dictionary object
sein:
Falsch: func(a=r)
Richtig: func(a={'x':y})
Es ist einfach ein Problem mit dem JSON-Datenformat. Korrigieren Sie es und Sie sind fertig.
Auch ich hatte ein ähnliches Problem. Die Lösung ist einfach. Versuchen Sie einfach nicht, NULL oder None in die Werte einzugeben, da Sie sonst möglicherweise so etwas verwenden müssendic.update([(key,value)])