it-swarm.dev

خطأ: "عنصر تسلسل تحديث القاموس # 0 طوله 1 ؛ 2 مطلوب" في Django 1.4

لدي رسالة خطأ على جانغو 1.4:

عنصر تسلسل تحديث القاموس # 0 طوله 1؛ 2 مطلوب

[تصحيح]

حدث ذلك عندما حاولت استخدام علامة قالب مثل: {{٪ for v in value٪}:

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,

أنا فقط أحاول الوصول إلى القيمة. لا أفهم رسالة "تسلسل التحديث". عند استخدام مؤشر بدلاً من queryset hstore ، تعمل الوظيفة. الخطأ يأتي في تقديم قالب أيضا. لقد قمت فقط بإعادة تشغيل uwsgi وكل شيء يعمل بشكل جيد ، لكن الخطأ عاد لاحقًا.

[تصحيح]

لديه شخص فكرة؟

120
user2575627

فقط واجهت هذه المشكلة. لا أعرف ما إذا كان الأمر نفسه هو الذي ضرب الكود الخاص بك ، ولكن السبب الرئيسي بالنسبة لي هو أنني نسيت وضع name= في الوسيطة الأخيرة لاستدعاء دالة url.

على سبيل المثال ، يلقي الخطأ التالي من السؤال:

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 تحليل الوسيطة الموضعية الوسيطة كـ الكلمة الأساسية الوسيطة kwargs ، وبما أن السلسلة عبارة عن متكررة ، يبدأ مسار رمز غير عادي في التوضيح. استخدم دائمًا name= على عناوين url الخاصة بك!

317
Thane Brimhall

يظهر خطأ في سؤالك عند تجربة شيء مثل التالي:

>>> 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

من الصعب معرفة أين هو السبب في التعليمات البرمجية الخاصة بك إلا إذا قمت بعرض التعليمات البرمجية الخاصة بك ، تتبع كامل.

25
falsetru

واجهت المشكلة المذكورة أعلاه عندما نسيت تمرير وسيطة name to url () لوظيفة الكلمة الرئيسية.

رمز مع الخطأ

 url(r"^testing/$", views.testing, "testing")

رمز بدون خطأ

url(r"^testing/$", views.testing, name="testing")

وأخيراً ، أزلت الخطأ أعلاه بهذه الطريقة. قد يكون هناك شيء مختلف في قضيتك. لذا تحقق من أنماط عناوين url الخاصة بك في urls.py .

13
hygull

حصلت على هذا الخطأ عندما كنت العبث بالسلسلة والقاموس.

dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required

إذن ما عليك فعله فعلاً للحصول على إملاء من الأوتار هو:

dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}
10
Taras 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 والمطلوب اثنين ، فسنحصل على هذا النوع من الخطأ. انظر الكود أعلاه. لأول مرة أعطيت التسلسل مع Tuple وطوله 1 ، ثم حصلنا على الخطأ ولم يتم تحديث القاموس. في المرة الثانية التي أعطيتها داخل Tuple مع عنصرين ، تم تحديث القاموس.

9
naveen tamanam

حل"

قم بتمرير وسيطة اسم ذات قيمة كاسم العرض الخاص بك ، على سبيل المثال ، home أو home-view وما إلى ذلك إلى url() ظيفة.

خطأ في الرميات "

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

صيح"

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

9
spaceNeenja

حصلت على نفس المشكلة ووجدت أنه كان بسبب معلمات خاطئة. في views.py ، استخدمت:

return render(request, 'demo.html',{'items', items})    

لكنني وجدت المشكلة: {'items', items}. أدى التغيير إلى {'items': items} إلى حل المشكلة.

3
Binoy Babu

في حالتي ، كان get_context_data الخاص بي في أحد طرق العرض الخاصة بي يعيد return render(self.request, 'es_connection_error.html', {'error':error}); في كتلة try/catch بدلاً من context

2
shadi

يجب أن يكون الخطأ مع المعلمات. يرجى التحقق من أن المعلمات هي كائن القاموس . إذا كانت مجرد قائمة/مجموعة من الوسيطات ، استخدم واحدًا فقط (*params) بدلاً من اثنين * (**params). هذا سوف ينفجر القائمة/Tuple في كمية مناسبة من الحجج.

أو ، إذا كانت المعلمات تأتي من جزء آخر من التعليمات البرمجية كملف JSON ، فالرجاء تنفيذ json.loads(params) ، لأن كائنات JSON تتصرف في بعض الأحيان كسلسلة ولذا تحتاج إلى جعلها JSON باستخدام التحميل من السلسلة (تحميل).

super(HStoreDictionary, self).__init__(value, **params)

أتمنى أن يساعدك هذا!

2
Midhun C Nair

لقد واجهت هذه المشكلة عند محاولة استدعاء طريقة التحديث باستخدام معلمة من النوع الخطأ. الامل المتوقع هو:

{'foo': True}

الذي تم تمريره كان:

{'foo': "True"}

تأكد من التحقق من جميع المعلمات التي تمر بها من النوع المتوقع.

1
Nick Kobishev

أنت ترسل معلمة واحدة بشكل غير صحيح ؛ يجب أن يكون dictionary object:

  • خطأ: func(a=r)

  • تصحيح: func(a={'x':y})

0
soField

إنها ببساطة مشكلة في تنسيق بيانات JSON. تصحيح ذلك وانت القيام به.

0
GaurZilla

أنا أيضًا واجهت مشكلة مماثلة. الحل بسيط. لا تحاول إدخال قيمة NULL أو None في القيم أو قد تضطر إلى استخدام شيء مثل هذا
dic.update([(key,value)])

0
yunus