2013-04-30 17 views
5

Ich benutze Django 1.5.1 und Piston für Rest Unterstützung mit MongoDB Datenbank.'HttpResponse' hat kein Attribut '_get_content

Beim Versuch, die Rest-URL zum Abrufen der Daten zu testen, erhalte ich den folgenden Fehler.

type object 'HttpResponse' has no attribute '_get_content' 
Request Method: GET 
Request URL: http://127.0.0.1:8000/annotation/search?limit=20&uri=/document 
Django Version: 1.5.1 
Exception Type: AttributeError 
Exception Value:  
type object 'HttpResponse' has no attribute '_get_content' 
Exception Location: /home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py in HttpResponseWrapper, line 72 
Python Executable: /home/tank/sites/python/env.example/bin/python 
Python Version: 2.7.4 

Das Problem wird in der Kolbencode generiert, nicht sicher, der Grund. Hier ist die vollständige Zurückverfolgungs

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/annotations/search?limit=20&uri=/templates 

Django Version: 1.5.1 
Python Version: 2.7.4 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'django.contrib.flatpages', 
'app.modules.members', 
'app.modules.cms', 
'app.modules.annotator', 
'debug_toolbar') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'debug_toolbar.middleware.DebugToolbarMiddleware') 


Traceback: 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/views/decorators/vary.py" in inner_func 
    19.    response = func(*args, **kwargs) 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in __call__ 
    166.    result = self.error_handler(e, request, meth, em_format) 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in error_handler 
    257.    result = rc.BAD_REQUEST 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py" in __getattr__ 
    51.   class HttpResponseWrapper(HttpResponse): 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py" in HttpResponseWrapper 
    72.    content = property(HttpResponse._get_content, _set_content)    

Exception Type: AttributeError at /annotations/search 
Exception Value: type object 'HttpResponse' has no attribute '_get_content' 

/Danke

New Fehler Trackbacks für 'HttpResponseWrapper' Objekt hat kein Attribut '_is_string':

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/annotations/search?limit=20&uri= 

Django Version: 1.5.1 
Python Version: 2.7.4 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'django.contrib.flatpages', 
'app.modules.members', 
'app.modules.cms', 
'app.modules.annotator', 
'debug_toolbar') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'debug_toolbar.middleware.DebugToolbarMiddleware') 


Traceback: 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/views/decorators/vary.py" in inner_func 
    19.    response = func(*args, **kwargs) 
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in __call__ 
    184.   if isinstance(result, HttpResponse) and not result._is_string: 

Exception Type: AttributeError at /annotations/search 
Exception Value: 'HttpResponseWrapper' object has no attribute '_is_string' 

Antwort

3

In Django 1.5 dieser Code:

def _get_content(self): 
    # do some stuff 

def _set_content(self): 
    # do some stuff 

content = property(_get_content, _set_content) 

wurde geändert in:

@property 
def content(self): 
    # do some stuff 

@content.setter 
def content(self, value): 
    # do some stuff 

Also, Django 1.5 hat keine _get_content Funktion. Sie sollten HttpResponseWrapper in Kolben/utils.py zu so etwas wie dies ändern:

class HttpResponseWrapper(HttpResponse): 
    """ 
    Wrap HttpResponse and make sure that the internal 
    _is_string/_base_content_is_iter flag is updated when the 
    _set_content method (via the content property) is called 
    """ 

    def _set_content(self, content): 
     """ 
     Set the _container and _is_string/
     _base_content_is_iter properties based on the type of 
     the value parameter. This logic is in the construtor 
     for HttpResponse, but doesn't get repeated when 
     setting HttpResponse.content although this bug report 
     (feature request) suggests that it should: 
     http://code.djangoproject.com/ticket/9403 
     """ 
     is_string = False 
     if not isinstance(content, basestring) and hasattr(content, '__iter__'): 
      self._container = content 
     else: 
      self._container = [content] 
      is_string = True 
     if django.VERSION >= (1, 4): 
      self._base_content_is_iter = not is_string 
     else: 
      self._is_string = is_string 

    try: 
     # Django versoin is older than 1.5 

     content = property(HttpResponse._get_content, _set_content) 

    except: 
     # Django version 1.5 

     @HttpResponse.content.setter 
     def content(self, content): 
      self._set_content(content) 

Lassen Sie mich wissen, ob es funktioniert, werde ich verpflichten, dies zu piston Code.


Über das zweite Problem: vielleicht ist Ihre Version alt. Dieses Problem wurde bereits in this commit behoben.

+0

ich die folgende Fehlermeldung erhalten: '‚HttpResponseWrapper‘Objekt hat kein Attribut‚_is_string‘ anfordern Methode: \t GET anfordern URL: \t http://127.0.0.1:8000/annotations/search?limit=20&uri= Django Version: \t 1.5.1 Ausnahmetyp: \t Attribute Ausnahmewert: \t ‚Htt pResponseWrapper 'Objekt hat kein Attribut' _is_string ' Ausnahme Ort: \t /home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py in __call__, Zeile 184' – tank

+0

@tank, Könnten Sie bitte die neue vollständige Traceback zur Frage hinzufügen? – soon

+0

@tank, siehe aktualisierte Antwort. – soon

Verwandte Themen