Джанго Снотс не работает - PullRequest
0 голосов
/ 29 января 2010

Я только что установил 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

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

И я только что использовал его, как описано на 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 Ответ

1 голос
/ 30 января 2010

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

Если что-то не так с вашим вводом для cnotes, вы должны увидеть это, если взгляните на типы ваших message s (я использовал 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, я бы покопался в вашем коде и выяснил, откуда этот другой тип пришел, или убедился, что его можно засечь .

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

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

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

message2 = unicode(_("You may now close "))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...