[python] 오류 :“사전 업데이트 시퀀스 요소 # 0의 길이는 1입니다. Django 1.4의 경우 2가 필요합니다.
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
모든 것이 제대로 작동하지만 나중에 오류가 다시 발생합니다.
[편집하다]
누군가 아이디어가 있습니까?
답변
이 문제가 발생했습니다. 코드에 맞는 것과 같은 것인지 모르겠지만 근본 원인은 (또는 name=
마지막 인수를 취하는 것을 잊었 기 때문 입니다.url
path
Django 2.0 이상에서) 함수 호출 입니다.
예를 들어 다음 함수는 질문에서 오류를 발생시킵니다.
url(r'^foo/(?P<bar>[A-Za-z]+)/$', views.FooBar.as_view(), 'foo')
path('foo/{slug:bar}/', views.FooBar, 'foo')
그러나 이들은 실제로 작동합니다.
url(r'^foo/(?P<bar>[A-Za-z]+)/$', views.FooBar.as_view(), name='foo')
path('foo/{slug:bar}/', views.FooBar, name='foo')
역 추적이 도움이되지 않는 이유는 내부적으로 Django가 주어진 위치 인수를 키워드 argument 로 구문 분석하고 kwargs
문자열이 반복 가능하므로 비정형 코드 경로가 전개되기 때문입니다. 항상 name=
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'}
또는 보안상의 이유로 literal_eval을 사용할 수 있습니다.
from ast import literal_eval
답변
다음과 같은 것을 시도하면 질문에 오류가 발생합니다.
>>> 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
코드를 표시하지 않으면 코드의 원인이 어디인지 파악하기가 어렵습니다.
답변
키워드 인수 이름 을 url () 함수 에 전달하는 것을 잊었을 때 위에서 언급 한 문제에 직면했습니다 .
오류가있는 코드
url(r"^testing/$", views.testing, "testing")
오류없는 코드
url(r"^testing/$", views.testing, name="testing")
그래서 마지막으로 위의 오류를 이런 식으로 제거했습니다. 귀하의 경우에는 다를 수 있습니다. 따라서 urls.py 에서 URL 패턴을 확인하십시오 .
답변
해결책”
키워드 인수에 전달 이름을 보기 이름 예를 들어, 같은 값으로 home
나 home-view
에게 등url()
기능.
오류 발생»
url(r'^home$', 'common.views.view1', 'home'),
옳은”
url(r'^home$', 'common.views.view1', name='home'),
답변
재현 된 오류는 다음과 같습니다.
>>> 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가 필요한 경우 이러한 종류의 오류가 발생합니다. 위의 코드를 참조하십시오. 처음으로 튜플로 시퀀스를 제공하고 길이가 1이면 오류가 발생하고 사전이 업데이트되지 않습니다. 두 번째 요소로 튜플 내부에 두 번째로 갔을 때 사전이 업데이트되었습니다.
답변
같은 문제가 발생하여 매개 변수가 잘못되었다는 것을 알았습니다. 에 views.py
, 내가 사용 :
return render(request, 'demo.html',{'items', items})
그러나 나는 문제를 발견했다 {'items', items}
. {'items': items}
문제 해결로 변경