webentwicklung-frage-antwort-db.com.de

Fehler: "Dictionary Update Sequence Element # 0 hat Länge 1; 2 ist erforderlich" auf Django 1.4

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?

115
user2575627

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!

310
Thane Brimhall

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.

25
falsetru

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 .

11
hygull

Lösung"

Übergeben Sie ein Schlüsselwortargument name mit dem Wert Ihres Ansichtsnamens, z. B. home oder home-view Usw. an url() function.

Wirft Fehler "

url(r'^home$', 'common.views.view1', 'home'),

Richtig"

url(r'^home$', 'common.views.view1', name='home'),

10
spaceNeenja

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'}
10
Taras 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.

9
naveen tamanam

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.

3
Binoy Babu

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.

2
shadi

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!

2
Midhun C Nair

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.

1
Nick Kobishev

Sie senden einen Parameter falsch. es sollte ein dictionary object sein:

  • Falsch: func(a=r)

  • Richtig: func(a={'x':y})

0
soField

Es ist einfach ein Problem mit dem JSON-Datenformat. Korrigieren Sie es und Sie sind fertig.

0
GaurZilla

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üssen
dic.update([(key,value)])

0
yunus