Mam komunikat o błędzie na django 1.4:
element sekwencji aktualizacji słownika # 0 ma długość 1; 2 jest wymagane
[EDYTOWAĆ]
Stało się tak, gdy próbowałem użyć tagu szablonu, takiego jak: `{% 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
Dzieje się tak również, gdy próbuję uzyskać dostęp do zestawu zapytań hstore:
[edytować]
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
kod to:
tmp = Item.objects.where(HE("kv").contains({'key':value}))
if tmp.count() > 0:
item_id = tmp[0].id,
Po prostu próbuję uzyskać dostęp do wartości. Nie rozumiem komunikatu „sekwencja aktualizacji”. Kiedy używam kursora zamiast hstore queryset, funkcja działa. Błąd występuje również podczas renderowania szablonu. Właśnie zrestartowałem uwsgi
i wszystko działa dobrze, ale błąd wraca później.
[edytować]
Czy ktoś ma pomysł?
values
itmp
. Podczas gdy brakuje kodu, -1 (prawdopodobnie tymczasowe) dla tego pytania.dict(['A',"b"])
chociaż tak nie jestdict([('A',"b")])
Odpowiedzi:
Właśnie napotkałem ten problem. Nie wiem, czy to to samo, co uderzyło w twój kod, ale dla mnie główną przyczyną było to, że zapomniałem wstawić
name=
ostatni argument wywołania funkcjiurl
(lubpath
w Django 2.0+).Na przykład następujące funkcje zgłaszają błąd z pytania:
Ale te faktycznie działają:
Powodem, dla którego śledzenie zwrotne nie jest pomocne, jest to, że wewnętrznie Django chce przeanalizować podany argument pozycyjny jako argument słowa kluczowego
kwargs
, a ponieważ łańcuch jest iterowalny, nietypowa ścieżka kodu zaczyna się rozwijać. Zawsze używajname=
w swoich adresach URL!źródło
Router.register
metody Django RestFramework. Wygląda bardzo podobnie, różnica jestname
kwarg ...path
adresu URL w stylu Django 2.0 . Zapomniał użyć kwarg i miał to:path('foo/', views.foo, 'foo')
. Musiałem przesiąść się napath('foo/', views.foo, name='foo')
Pojawił się ten błąd, kiedy bawiłem się ciągiem znaków i słownikiem.
Więc to, co tak naprawdę musisz zrobić, aby uzyskać dict ze stringa, to:
Lub jeśli chodzi o bezpieczeństwo, możemy użyć literal_eval
źródło
Błąd w twoim pytaniu pojawia się, gdy spróbujesz czegoś takiego jak:
Trudno powiedzieć, gdzie jest przyczyna w twoim kodzie, chyba że pokażesz swój kod, pełne śledzenie.
źródło
Napotkałem wyżej wymieniony problem, gdy zapomniałem przekazać nazwę argumentu słowa kluczowego do funkcji url ().
Kod z błędem
Kod bez błędów
W końcu w ten sposób usunąłem powyższy błąd. W twoim przypadku może być coś innego. Więc sprawdzić wzorców adresów URL w urls.py .
źródło
Rozwiązanie"
Przekaż nazwę argumentu słowa kluczowego z wartością jako nazwą widoku, np.
home
Lubhome-view
itp. Dourl()
funkcji.Zgłasza błąd »
url(r'^home$', 'common.views.view1', 'home'),
Poprawny"
url(r'^home$', 'common.views.view1', name='home'),
źródło
Oto odtworzony błąd.
Jeśli podasz sekwencję i długość dowolnego elementu wynosi 1, a wymagane są dwa, otrzymamy tego rodzaju błąd. Zobacz powyższy kod. Pierwszy raz podałem sekwencję z krotką i jej długością 1, po czym otrzymaliśmy błąd i słownik nie jest aktualizowany. za drugim razem podałem wewnętrzną krotkę z dwoma elementami, słownik został zaktualizowany.
źródło
Mam ten sam problem i stwierdziłem, że jest to spowodowane niewłaściwymi parametrami. W
views.py
, użyłem:Ale znalazłem problem:
{'items', items}
. Zmiana w celu{'items': items}
rozwiązania problemu.źródło
W moim przypadku mój
get_context_data
w jednym z moich widoków wracałreturn render(self.request, 'es_connection_error.html', {'error':error});
w bloku try / catch zamiast powrotucontext
źródło
Błąd powinien dotyczyć parametrów. Sprawdź, czy parametry są obiektem słownika . Jeśli jest to tylko lista / krotka argumentów, użyj tylko jednej * (
*params
) zamiast dwóch * (**params
). Spowoduje to rozbicie listy / krotki na odpowiednią liczbę argumentów.Lub, jeśli parametry pochodzą z innej części kodu jako plik JSON, zrób to
json.loads(params)
, ponieważ obiekty JSON czasami zachowują się jak ciąg znaków, więc musisz zrobić to jako JSON, używając funkcji load from string (ładuje).Mam nadzieję że to pomoże!
źródło
Napotkałem ten problem, próbując wywołać metodę aktualizacji z parametrem niewłaściwego typu. Oczekiwany dykt był:
Ten, który został przekazany, to:
upewnij się, że wszystkie przekazywane parametry mają oczekiwany typ.
źródło
Wysyłasz jeden parametr nieprawidłowo; powinien to być
dictionary object
:Źle:
func(a=r)
Poprawny:
func(a={'x':y})
źródło
Ja też miałem podobny problem. Rozwiązanie jest proste. po prostu nie próbuj wpisywać wartości NULL lub None w wartościach, bo może być konieczne użycie czegoś takiego
dic.update([(key,value)])
źródło