xpa*_*nta 19 python django json
我有这个 views.py
response_dict = {
'status': status,
'message': message
}
return HttpResponse(simplejson.dumps(response_dict),
mimetype='application/javascript')
Run Code Online (Sandbox Code Playgroud)
自从我开始使用这个导入:
from django.utils.translation import ugettext_lazy as _
在这一行:
message = _('This is a test message')
我收到此错误:
File "/home/chris/work/project/prokject/main/views.py", line 830, in fooFunc
return HttpResponse(simplejson.dumps(response_dict),
File "/usr/local/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/local/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <django.utils.functional.__proxy__ object at 0x7f42d581b590> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
为什么?我究竟做错了什么?
小智 48
您还可以创建自己的JSON编码器,强制__proxy__进行unicode.
来自https://docs.djangoproject.com/en/1.8/topics/serialization/
from django.utils.functional import Promise
from django.utils.encoding import force_text
from django.core.serializers.json import DjangoJSONEncoder
class LazyEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, Promise):
return force_text(obj)
return super(LazyEncoder, self).default(obj)
Run Code Online (Sandbox Code Playgroud)
所以现在你的代码看起来像:
response_dict = {
'status': status,
'message': _('Your message')
}
return HttpResponse(json.dumps(response_dict, cls=LazyEncoder),
mimetype='application/javascript')
Run Code Online (Sandbox Code Playgroud)
Rem*_*ich 23
它还不是一个字符串,并且Python的JSON编码器不知道ugettext_lazy,所以你必须强制它成为一个类似于字符串的字符串
response_dict = {
'status': status,
'message': unicode(message)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10684 次 |
| 最近记录: |