Ich habe eine Fehlermeldung auf Django 1.4:
Das Wörterbuchaktualisierungssequenzelement # 0 hat die Länge 1; 2 ist erforderlich
[BEARBEITEN]
Es passierte, als ich versuchte, ein Vorlagen-Tag wie das folgende zu verwenden: `{% für v in Werten%}:
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. Ich verstehe die Meldung "Aktualisierungssequenz" nicht. Wenn ich einen Cursor anstelle von hstore queryset verwende, funktioniert die Funktion. Der Fehler tritt auch beim Rendern von Vorlagen auf. Ich habe gerade neu gestartet uwsgi
und alles funktioniert gut, aber der Fehler kommt später zurück.
[bearbeiten]
Hat jemand eine Idee?
values
und isttmp
. Während Code fehlt, -1 (möglicherweise vorübergehend) für diese Frage.dict(['A',"b"])
während dies nichtdict([('A',"b")])
Antworten:
Bin gerade auf dieses Problem gestoßen. Ich weiß nicht, ob es dasselbe ist, das Ihren Code getroffen hat, aber für mich war die Hauptursache, dass ich vergessen habe,
name=
das letzte Argument des Funktionsaufrufsurl
(oderpath
in Django 2.0+) anzugeben.Zum Beispiel werfen die folgenden Funktionen den Fehler aus der Frage:
Aber diese funktionieren tatsächlich:
Der Grund , warum die Rückverfolgung ist nicht hilfreich, weil intern, will Django die gegebene analysieren Positions Argument als Schlüsselwort - Argument
kwargs
, und da eine Zeichenfolge ein iterable ist, ein atypisches Codepfad beginnt sich zu entfalten. Verwendenname=
Sie immer auf Ihren URLs!quelle
Router.register
Methode von Django RestFramework verwenden. Es sieht sehr ähnlich aus, der Unterschied ist dername
kwarg ...path
URL im Django 2.0-Stil erhalten . Ich habe vergessen, den Kwarg zu benutzen und hatte folgendes :path('foo/', views.foo, 'foo')
. Ich musste zupath('foo/', views.foo, name='foo')
Ich habe diesen Fehler erhalten, als ich mit String und Wörterbuch herumgespielt habe.
Was Sie also tatsächlich tun müssen, um ein Diktat aus dem String zu erhalten, ist:
Oder aus Sicherheitsgründen können wir literal_eval verwenden
quelle
Ein Fehler in Ihrer Frage wird ausgelöst, wenn Sie Folgendes versuchen:
Es ist schwer zu sagen, wo die Ursache in Ihrem Code liegt, es sei denn, Sie zeigen Ihren Code, vollständige Rückverfolgung.
quelle
Ich stand vor der oben genannten Problem , wenn ich vergessen , ein Stichwort Argument übergeben Namen zu url () Funktion.
Code mit Fehler
Code ohne Fehler
Also habe ich endlich den obigen Fehler auf diese Weise behoben. In Ihrem Fall könnte es etwas anderes sein. So überprüfen Sie die URL - Muster in urls.py .
quelle
Lösung"
Übergeben Sie einen Schlüsselwort - Argument Name mit Wert als Ansichtsnamen zB
home
oderhome-view
etc.url()
Funktion.Wirft Fehler »
url(r'^home$', 'common.views.view1', 'home'),
Richtig"
url(r'^home$', 'common.views.view1', name='home'),
quelle
Hier ist der reproduzierte Fehler.
Wenn Sie die Sequenz angeben und eine Elementlänge 1 ist und zwei benötigt, wird diese Art von Fehler angezeigt. Siehe den obigen Code. Als ich die Sequenz zum ersten Mal mit Tupel und ihrer Länge 1 angegeben habe, haben wir den Fehler erhalten und das Wörterbuch wurde nicht aktualisiert. Das zweite Mal, als ich ein Insider-Tupel mit zwei Elementen gab, wurde das Wörterbuch aktualisiert.
quelle
Ich habe das gleiche Problem festgestellt und festgestellt, dass es an falschen Parametern liegt. In habe
views.py
ich verwendet:Aber ich fand das Problem :
{'items', items}
. Ändern,{'items': items}
um das Problem zu beheben.quelle
In meinem Fall kehrte meine
get_context_data
Ansicht in einer meiner Ansichtenreturn render(self.request, 'es_connection_error.html', {'error':error});
in einem Try / Catch-Block zurück, anstatt zurückzukehrencontext
quelle
Der Fehler sollte bei den Parametern liegen. Bitte stellen Sie sicher, dass die Parameter ein Wörterbuchobjekt sind . Wenn es sich nur um eine Liste / ein Tupel von Argumenten handelt, verwenden Sie nur ein * (
*params
) anstelle von zwei * (**params
). Dadurch wird die Liste / das Tupel in die richtige Anzahl von Argumenten aufgelöst.Wenn die Parameter aus einem anderen Teil des Codes als JSON-Datei stammen, tun Sie dies bitte
json.loads(params)
, da sich die JSON-Objekte manchmal als Zeichenfolge verhalten und Sie sie daher als JSON mithilfe von load from string (load) .Hoffe das hilft!
quelle
Dieses Problem trat auf, als ich versuchte, die Aktualisierungsmethode mit einem Parameter eines falschen Typs aufzurufen. Das erwartete Diktat war:
Derjenige, der bestanden wurde, war:
Stellen Sie sicher, dass alle übergebenen Parameter vom erwarteten Typ sind.
quelle
Sie senden einen Parameter falsch. es sollte ein sein
dictionary object
:Falsch:
func(a=r)
Richtig:
func(a={'x':y})
quelle
Ich hatte auch ein ähnliches Problem. Die Lösung ist einfach. Versuchen Sie einfach nicht, den Wert NULL oder None in die Werte einzugeben, da Sie sonst möglicherweise so etwas verwenden müssen
dic.update([(key,value)])
quelle