私はDjango Rest Frameworkを使ってAPIを構築し、開発マシンに実装しています。私は今日すぐにそれを展開したいと思っていました。私は依存関係を再インストールし、Djangoを再インストールし、数時間バグを見つけたが、この最新のものは私とGoogleを打ち負かした。Django Rest Frameworkから呼び出されたPython Urbjectの不思議なエラー
フレームワークからビューの1つを呼び出すと、正しい応答が得られます(静的ファイルは除いていますが、後でそれを扱います)。しかし、デプロイメントマシンでは、次のエラーが発生します。
'SplitResult' object has no attribute '_replace'
トレースバックは、残りの枠組みの中でテンプレートタグを通過しますが、エラーは、この方法ではurlobjectで投げているように見える:
def __replace(self, **replace):
"""Replace a field in the ``urlparse.SplitResult`` for this URL."""
return type(self)(urlparse.urlunsplit(
urlparse.urlsplit(self)._replace(**replace)))
私は私の開発マシン上でこれを再現することはできません、と私このエラーへの参照を見つけることができませんanywh ere。私がDjango 1.2,1.3,1.4のデプロイメントサーバで試してみたが、そのエラーはDjango自身とは無関係のようだ。
はここで完全なトレースバックです:
Django Version: 1.3.1
Python Version: 2.5.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'char',
'djangorestframework']
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')
Traceback:
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.5/site-packages/django/views/generic/base.py" in view
47. return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python2.5/site-packages/django/views/decorators/csrf.py" in wrapped_view
39. resp = view_func(*args, **kwargs)
File "/usr/lib/python2.5/site-packages/django/views/decorators/csrf.py" in wrapped_view
52. return view_func(*args, **kwargs)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/django-rest-framework/djangorestframework/views.py" in dispatch
243. return self.final(request, response, *args, **kwargs)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/django-rest-framework/djangorestframework/views.py" in final
196. return self.render(response)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/django-rest-framework/djangorestframework/mixins.py" in render
251. content = renderer.render(response.cleaned_content, media_type)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/django-rest-framework/djangorestframework/renderers.py" in render
351. ret = template.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
123. return self._render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in _render
117. return self.nodelist.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/loader_tags.py" in render
127. return compiled_parent._render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in _render
117. return self.nodelist.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/defaulttags.py" in render
311. return self.nodelist_true.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/defaulttags.py" in render
227. nodelist.append(node.render(context))
File "/usr/lib/python2.5/site-packages/django/template/defaulttags.py" in render
500. output = self.nodelist.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
744. bits.append(self.render_node(node, context))
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render_node
757. return node.render(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in render
792. output = self.filter_expression.resolve(context)
File "/usr/lib/python2.5/site-packages/django/template/base.py" in resolve
536. new_obj = func(obj, *arg_vals)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/django-rest-framework/djangorestframework/templatetags/add_query_param.py" in add_query_param
7. return unicode(URLObject(url).with_query(param))
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/urlobject/lib/urlobject/urlobject.py" in with_query
117. return self.__replace(query=query)
File "/home/wfrp/wfrp-django/DjangoWfrp/external apps/urlobject/lib/urlobject/urlobject.py" in __replace
181. urlparse.urlsplit(self)._replace(**replace)))
Exception Type: AttributeError at /api/
Exception Value: 'SplitResult' object has no attribute '_replace'
これは、スタックオーバーフローの私の最初の時間である - 助けに感謝します。
私の推測では、Pythonのバージョンの不一致で見ているエラーを説明するだろう
_replace
方法を、持っていないtuple
のサブクラスでした。私の2.7は本当に '_replace'を持っていますが、私はそこにドキュメントを見つけることができません。 –