2010-01-29 9 views
0

Я только что установил django-cnotes Но он не будет работать. Он просто бросает эту ошибкуdjango cnotes не работает

Traceback (самый последний вызов в прошлом):

File "/Library/Python/2.5/site-packages/django/core/servers/basehttp.py", line 279, in run 
self.result = application(self.environ, self.start_response) 

File "/Library/Python/2.5/site-packages/django/core/servers/basehttp.py", line 651, in __call__ 
return self.application(environ, start_response) 

File "/Library/Python/2.5/site-packages/django/core/handlers/wsgi.py", line 245, in __call__ 
response = middleware_method(request, response) 

File "/Library/Python/2.5/site-packages/django_cnote-0.3.4-py2.5.egg/cnotes/middleware.py", line 47, in process_response 
signed_data = self.sign('cnotes', base64.urlsafe_b64encode(Pickle.dumps(cnotes.cnotes))) 

PicklingError: Can't pickle <class 'django.utils.functional.__proxy__'>: attribute lookup django.utils.functional.__proxy__ failed 

И даже не в обычных страницах отладки ошибок Джанго. То, что вы видите выше, есть все, что есть на экране.

И я только что использовал его, как описано в github, я просто не понимаю. У кого-нибудь есть идея, что вызывает это?

UPDATE: Хорошо, поэтому я нашел что-то, я думаю.

message = _("You have successfully altered ") 
message += edituser.username 
cnotes.add(message) 
message2 = _("You may now close ") 
cnotes.add(message2) 

Это приведет к ошибке. Поэтому я подумал: «Хорошо, я могу назвать это только один раз за просмотр». Это было бы глупо, и это действительно не было причиной.

Следующий код не будет производить без ошибки

message = _("You have successfully altered ") 
message += edituser.username 
cnotes.add(message) 
message2 = '_("You may now close ")' 
cnotes.add(message2) 

Но не из-за перевода он использует, что тонкодисперсных всего 2 строки выше, но это должно быть что-то с выполнением другой перевод или что-то. Я потерялся.

ответ

1

Похоже, что pickle получает объект типа django.utils.functional.__proxy__. Это означает, что ваш вход является странным, или есть ошибка в cnotes.

Если есть что-то не так с вашим вкладом в cnotes, вы должны увидеть, если вы посмотрите на типы ваших message с (я использовал manage.py shell):

>>> message = _("You have successfully altered ") 
>>> message += "Bob Knoblick" 
>>> type(message) 
<type 'unicode'> 
>>> message2 = _("You may now close ") 
>>> type(message2) 
<type 'unicode'> 
>>> 

Если типы возвращаются как ничто иное, как unicode или str, я бы вникнул в ваш код и выяснил, откуда этот другой тип, или убедитесь, что он can be pickled.

Если есть что-то неправильное в cnotes, вы должны получить ту же ошибку делает это:

cnotes.add(u'Foo') 
cnotes.add(u'Bar') 
cnotes.add(u'Baz') 

За оригинальный автор:
переведенная строка, _("You may now close ") не заканчиваясь в виде строки Юникода , Это можно использовать для принудительного юникода перед отправкой на cnotes:

message2 = unicode(_("You may now close ")) 
+0

Это помогло. Просто заполнить решение для кого-то еще, чтобы найти, хотя он мертв просто (ofc). При добавлении экземпляра пользователя (или его части) он превращает всю переменную в unnicode, но я не делал этого во второй раз, из-за чего я его не поймал. Напомним: преобразовать переведенные объекты в unicode или строки перед отправкой их в cnotes. Я просто сделал unicode (_ («Теперь вы можете закрыть»)), и все получилось отлично. Jack M. Если бы вы могли добавить решение к своему ответу, я могу отметить его как принятый для следующего новичка. Большое спасибо –