2013-04-30 35 views
5

Tôi đang sử dụng Django 1.5.1 và Piston để được hỗ trợ còn lại với cơ sở dữ liệu MongoDB.'HttpResponse' không có thuộc tính '_get_content

Khi cố gắng kiểm tra url còn lại để truy xuất dữ liệu, tôi nhận được lỗi sau.

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 

Sự cố được tạo trong mã piston, không chắc chắn lý do. Dưới đây là toàn bộ traceback

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' 

/Cảm ơn

trackback lỗi mới cho 'HttpResponseWrapper' đối tượng không có thuộc tính '_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' 

Trả lời

3

Trong Django 1,5 mã này:

def _get_content(self): 
    # do some stuff 

def _set_content(self): 
    # do some stuff 

content = property(_get_content, _set_content) 

đã được đổi thành:

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

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

Vì vậy, Django 1.5 không có chức năng _get_content. Bạn nên thay đổi HttpResponseWrapper trong piston/utils.py một cái gì đó như thế này:

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) 

Hãy cho tôi biết nếu nó hoạt động, tôi sẽ cam kết này để piston mã.


Về vấn đề thứ hai: có thể, phiên bản của bạn cũ. Vấn đề này đã được giải quyết trong cam kết this.

+0

tôi nhận được lỗi sau: ' 'HttpResponseWrapper' đối tượng không có thuộc tính '_is_string' Yêu cầu Phương pháp: \t GET Yêu cầu URL: \t http://127.0.0.1:8000/annotations/search?limit=20&uri= Django Version: \t 1.5.1 Exception Loại: \t AttributeError ngoại lệ giá trị gia tăng: \t 'Htt đối tượng pResponseWrapper 'không có thuộc tính' _is_string ' Vị trí ngoại lệ: \t /home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py trong __call__, dòng 184' – tank

+0

@tank, Bạn có thể, vui lòng thêm dấu vết mới đầy đủ vào câu hỏi không? – soon

+0

@tank, xem câu trả lời được cập nhật. – soon

Các vấn đề liên quan