2010-01-29 7 views
0

Je viens d'installer django-cnotes Mais ça ne marchera pas. Il jette juste cette erreurdjango cnotes ne fonctionne pas

retraçage (appel le plus récent en dernier):

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 

Et il est même pas dans la page de débogage d'erreur de django normale. Ce que vous voyez ci-dessus est tout ce qu'il y a sur l'écran.

Et je viens de l'utiliser comme décrit sur github, je ne comprends pas. Quelqu'un a une idée de ce qui cause cela?

MISE À JOUR: Bon, alors j'ai trouvé quelque chose, je pense.

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

Cela provoquera l'erreur. Alors j'ai pensé "Ok, je ne peux l'appeler qu'une fois par vue" Cela aurait été stupide et ce n'était en effet pas la cause.

Le code suivant produira aucune erreur

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

Mais n'est pas à cause de la traduction, il utilise cette fines lignes seulement 2 ci-dessus, mais il doit être quelque chose à faire une autre traduction ou quelque chose. Je suis perdu.

Répondre

1

Il semble que pickle reçoit un objet de type django.utils.functional.__proxy__. Cela signifie que votre entrée est bizarre, ou qu'il y a un bug dans cnotes.

S'il y a quelque chose de mal avec votre entrée à cnotes, vous devriez voir si vous jetez un oeil sur les types de vos message s (j'ai utilisé le manage.py shell):

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

Si vos types reviennent comme quoi que ce soit autre que unicode ou str, je voudrais creuser dans votre code et comprendre d'où vient cet autre type, ou assurez-vous qu'il can be pickled.

S'il y a quelque chose de mal dans cnotes, vous devriez obtenir la même erreur faire:

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

par l'auteur original:
La chaîne traduite, _("You may now close ") n'a pas été à sa fin comme une chaîne unicode . On peut l'utiliser pour forcer unicode avant d'envoyer à cnotes:

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

Cela a aidé. Il suffit de remplir la solution pour que quelqu'un d'autre la trouve, même si c'est très simple (ofc). Lors de l'ajout d'une instance d'utilisateur (ou d'une partie de celle-ci), l'ensemble de la variable devient non-codé, mais je ne l'ai pas fait la deuxième fois, ce qui explique pourquoi je ne l'ai pas attrapé. Pour récapituler: Convertir des objets traduits en unicode ou en chaînes avant de les envoyer aux cnotes. Je viens de faire Unicode (_ ("Vous pouvez maintenant fermer")) et cela a bien fonctionné. Jack M. Si vous pouvez ajouter la solution à votre réponse, je peux la marquer comme acceptée pour le prochain débutant à trouver. Merci beaucoup –

Questions connexes