I have this in my views.py
JavaScript
x
7
1
response_dict = {
2
'status': status,
3
'message': message
4
}
5
return HttpResponse(simplejson.dumps(response_dict),
6
mimetype='application/javascript')
7
Since I start using this import:
from django.utils.translation import ugettext_lazy as _
at this line:
message = _('This is a test message')
I get this error:
JavaScript
1
17
17
1
File "/home/chris/work/project/prokject/main/views.py", line 830, in fooFunc
2
return HttpResponse(simplejson.dumps(response_dict),
3
4
File "/usr/local/lib/python2.7/json/__init__.py", line 243, in dumps
5
return _default_encoder.encode(obj)
6
7
File "/usr/local/lib/python2.7/json/encoder.py", line 207, in encode
8
chunks = self.iterencode(o, _one_shot=True)
9
10
File "/usr/local/lib/python2.7/json/encoder.py", line 270, in iterencode
11
return _iterencode(o, 0)
12
13
File "/usr/local/lib/python2.7/json/encoder.py", line 184, in default
14
raise TypeError(repr(o) + " is not JSON serializable")
15
16
TypeError: <django.utils.functional.__proxy__ object at 0x7f42d581b590> is not JSON serializable
17
Why? What am I doing wrong?
Advertisement
Answer
You can also create you own JSON encoder that will force __proxy__
to unicode.
From https://docs.djangoproject.com/en/1.8/topics/serialization/
JavaScript
1
10
10
1
from django.utils.functional import Promise
2
from django.utils.encoding import force_text
3
from django.core.serializers.json import DjangoJSONEncoder
4
5
class LazyEncoder(DjangoJSONEncoder):
6
def default(self, obj):
7
if isinstance(obj, Promise):
8
return force_text(obj)
9
return super(LazyEncoder, self).default(obj)
10
So now your code can look like:
JavaScript
1
8
1
response_dict = {
2
'status': status,
3
'message': _('Your message')
4
}
5
6
return HttpResponse(json.dumps(response_dict, cls=LazyEncoder),
7
mimetype='application/javascript')
8