をアップグレードした後、次は正常に動作します:UnicodeDecodeErrorジャンゴ休止フレームワーク2の下ジャンゴ - 残り-枠組みする3
from rest_framework import rest_response, generics
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer
class SomeView(generics.GenericAPIView):
renderer_classes = JSONRenderer, BrowsableAPIRenderer
def get(self, request, *args, **kwargs):
...
# Build a response dict with non-ascii in it
...
return rest_response.Response(some_dict_with_non_ascii_in_it_somewhere)
私は明示的に非ASCII文字をエンコードする必要はありませんでした
...
はしかし、DRF 3にアップグレードした後に、同じコードは今、次のエラーがスローされます:
Traceback (most recent call last):
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/whitenoise/base.py", line 119, in __call__
return self.application(environ, start_response)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
response = self.get_response(request)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/core/handlers/base.py", line 218, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/core/handlers/base.py", line 261, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django_extensions/management/technical_response.py", line 5, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/core/handlers/base.py", line 164, in get_response
response = response.render()
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/django/template/response.py", line 158, in render
self.content = self.rendered_content
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/rest_framework/response.py", line 71, in rendered_content
ret = renderer.render(self.data, media_type, context)
File "/Users/troy/.virtualenvs/publisher/lib/python2.7/site-packages/rest_framework/renderers.py", line 104, in render
separators=separators
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 250, in dumps
sort_keys=sort_keys, **kw).encode(obj)
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 210, in encode
return ''.join(chunks)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 671: ordinal not in range(128)
私はDRF 3は今どこか、それはDRF 2.下のデフォルトだった私は」、いくつかの新しい設定値を持って推測していますやってみたgをTrue
に設定しても、同じエラーが発生します...
DRF 2のように動作するように設定できるのですか?またはDRF 3は私の辞書の非アスキー文字を捜して手作業でエンコードする必要がありますか?
ありがとうございました。私はそれを試してみましたが、関係するすべての文字列がdict内でユニコードになるようにしましたが、Responseオブジェクトを処理してdictを文字列に変換するライブラリコードにはimportステートメントがありません'' '.join() 'を実行する前に、ユニコードと通常の文字列の混合に変換されます。 – Troy