django – ‘HttpResponse’没有属性’_get_content

前端之家收集整理的这篇文章主要介绍了django – ‘HttpResponse’没有属性’_get_content前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Django 1.5.1和Piston来支持MongoDB数据库.

当尝试测试其余URL以检索数据时,我收到以下错误.

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

问题是在活塞代码中产生的,不确定原因.这是完整的追溯

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','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'

/谢谢

‘HttpResponseWrapper’对象的新错误引用没有属性’_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',**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'

解决方法

在Django 1.5中这段代码
def _get_content(self):
    # do some stuff

def _set_content(self):
    # do some stuff

content = property(_get_content,_set_content)

改为:

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

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

所以,Django 1.5没有_get_content函数.您应该将piston / utils.py中的HttpResponseWrapper更改为以下内容

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)

让我知道如果它有效,我将把它提交给活塞代码.

关于第二个问题:也许,你的版本已经过时了.此问题已在this提交中解决.

猜你在找的Python相关文章