2010-01-29 2 views
0

방금 ​​설치했습니다 django-cnotes 하지만 작동하지 않습니다. 그냥이 오류django cnotes not working

역 추적 (마지막으로 가장 최근 통화) 던졌습니다 :

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에 설명 된대로 사용 했으므로 그다지 이해하지 못합니다. 어떤 사람이 이것을 일으키는 지에 대한 아이디어가 있습니까?

업데이트 : 좋아, 그래서 뭔가를 찾았습니다.

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

마치 pickledjango.utils.functional.__proxy__ 유형의 개체를받는 것처럼 보입니다. 즉, 입력 내용이 이상하거나 버그가 cnotes에 있음을 의미합니다.

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

당신의 종류가 돌아올 경우

cnotes에 대한 귀하의 의견에 문제가있을 경우 당신은 당신의 message의 유형에 대해 살펴 경우, 당신은 그것을 볼 수 (나는이 manage.py shell 사용) unicode 또는 str 이외의 코드로 코드를 파고 다른 유형의 출처를 확인하거나 can be pickled인지 확인하십시오. 원래 저자 당

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

: cnotes 내에서 문제가있는 경우

과 같은 오류가이 일을 얻어야한다 번역 된 문자열, _("You may now close ")는 유니 코드 문자열로 끝나는되지
. 이 코드를 사용하여 유니 코드를 강제로 보내기 전에 cnotes :

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

도움이되었습니다. 다른 사람이 찾을 수있는 솔루션을 작성하는 것만으로도 간단하지만 (OFC) 간단합니다. User 인스턴스 (또는 그 일부)를 추가 할 때 전체 변수를 unnicode로 바꾼다.하지만 두 번째로는 그것을 잡아 내지 못했다. 요약 : 변환 된 개체를 cnotes로 보내기 전에 유니 코드 또는 문자열로 변환하십시오. 방금 ​​유니 코드 (_ ("지금 닫을 수 있습니다"))가 제대로 작동했습니다. Jack M. 답변을 솔루션에 추가 할 수있는 경우 다음 초보자가 찾을 수 있도록 허용으로 표시 할 수 있습니다. 많은 감사 –