from functools import wraps
from django.http import HttpResponse
from django.utils import simplejson as json
def render_to_json(**jsonargs):
"""
Renders a JSON response with a given returned instance. Assumes json.dumps() can
handle the result. The default output uses an indent of 4.
@render_to_json()
def a_view(request, arg1, argN):
...
return {'x': range(4)}
@render_to_json(indent=2)
def a_view2(request):
...
return [1, 2, 3]
"""
def outer(f):
@wraps(f)
def inner_json(request, *args, **kwargs):
result = f(request, *args, **kwargs)
r = HttpResponse(mimetype='application/json')
if result:
indent = jsonargs.pop('indent', 4)
r.write(json.dumps(result, indent=indent, **jsonargs))
else:
r.write("{}")
return r
return inner_json
return outer
Comments