Django 1.4でエラーメッセージが表示されます。
辞書更新シーケンス要素#0の長さは1です。 2が必要です
[編集]
次のようなテンプレートタグを使用しようとしたときに発生しました: `{%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
Hstoreクエリセットでアクセスしようとしたときにも発生します。
[編集]
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
コードは次のとおりです。
tmp = Item.objects.where(HE("kv").contains({'key':value}))
if tmp.count() > 0:
item_id = tmp[0].id,
値にアクセスしようとしています。 「更新シーケンス」メッセージがわかりません。 hstore querysetの代わりにカーソルを使用すると、関数が機能します。エラーはテンプレートのレンダリングでも発生します。 uwsgi
を再起動しましたが、すべて正常に動作しますが、エラーは後で戻ってきます。
[編集]
誰かがアイデアを持っていますか?
この問題に出くわしました。それがあなたのコードをヒットしたのと同じことかどうかはわかりませんが、私にとって根本的な原因は、url
関数呼び出しの最後の引数にname=
を置くのを忘れていたためです。
たとえば、次は質問からエラーをスローします。
url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), 'foo')
しかし、これは実際に機能します:
url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), name='foo')
トレースバックが役に立たない理由は、Djangoが内部的に、与えられたpositional引数をkeyword引数kwargs
として解析したいためです。パスが開き始めます。 URLには常にname=
を使用してください!
次のようなことをしようとすると、質問のエラーが発生します。
>>> 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
コードを完全にトレースバックしない限り、コードのどこに原因があるのかを知るのは困難です。
キーワード引数nameをurl()関数に渡すのを忘れたときに、上記の問題に直面しました。
エラーのあるコード
url(r"^testing/$", views.testing, "testing")
エラーのないコード
url(r"^testing/$", views.testing, name="testing")
最後に、この方法で上記のエラーを削除しました。あなたの場合は違うかもしれません。 rls.pyでURLパターンを確認してください。
文字列と辞書をいじっていたときにこのエラーが出ました。
dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required
したがって、文字列からdictを取得するために実際にやらなければならないことは次のとおりです。
dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}
これが再現されたエラーです。
>>> 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
>>>
シーケンスを指定し、要素の長さが1で2が必要な場合、この種のエラーが発生します。上記のコードを参照してください。初めてTupleでシーケンスを指定し、その長さが1の場合、エラーが発生し、辞書は更新されません。 2回目の要素でTuple内に2回目を入れたとき、辞書が更新されました。
キーワード引数nameをビュー名として値とともに渡します(例:home
またはhome-view
など)。url()
関数に渡します。
url(r'^home$', 'common.views.view1', 'home'),
url(r'^home$', 'common.views.view1', name='home'),
同じ問題が発生し、間違ったパラメーターが原因であることがわかりました。 views.py
では、次を使用しました。
return render(request, 'demo.html',{'items', items})
しかし、私は問題を見つけました:{'items', items}
。 {'items': items}
に変更すると、問題は解決しました。
私の場合、ビューの1つにあるget_context_data
は、context
を返す代わりに、try/catchブロックにreturn render(self.request, 'es_connection_error.html', {'error':error});
を返していました
エラーはparamsにあるはずです。 paramsが辞書オブジェクトであることを確認してください。引数のリスト/タプルだけの場合は、2つの*(*params
)ではなく、1つの*(**params
)のみを使用します。これにより、リスト/タプルが適切な量の引数に分解されます。
または、パラメーターがJSONファイルとしてコードの他の部分から来ている場合は、json.loads(params)
を実行してください。JSONオブジェクトはストリングとして動作することがあるため、ストリングからのロード(ロード)を使用してJSONにする必要があります。
super(HStoreDictionary, self).__init__(value, **params)
お役に立てれば!
間違ったタイプのパラメーターを使用してupdateメソッドを呼び出そうとしたときに、この問題が発生しました。予想された辞書は:
{'foo': True}
合格したのは:
{'foo': "True"}
渡されるすべてのパラメーターが期待されるタイプであることを確認してください。
1つのパラメーターを誤って送信しています。 dictionary object
である必要があります:
間違った:func(a=r)
正しい:func(a={'x':y})
これは単にJSONデータ形式の問題です。それを修正すれば完了です。
私も同様の問題を抱えていました。解決策は簡単です。値にNULLまたはNoneの値を入力しようとしないでください。または、このようなものを使用する必要があります。dic.update([(key,value)])