@@ -25,10 +25,14 @@ class JSONRenderer(renderers.JSONRenderer):
2525 }]
2626 }
2727 """
28+
2829 def render (self , data , accepted_media_type = None , renderer_context = None ):
2930 # Get the resource name.
3031 resource_name = utils .get_resource_name (renderer_context )
3132
33+ view = renderer_context .get ("view" , None )
34+ request = renderer_context .get ("request" , None )
35+
3236 # If `resource_name` is set to None then render default as the dev
3337 # wants to build the output format manually.
3438 if resource_name is None or resource_name is False :
@@ -44,22 +48,27 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
4448 )
4549
4650 # If detail view then json api spec expects dict, otherwise a list
47- if renderer_context .get ('view' ).action == 'list' :
48- results = data .get ('results' )
51+ # - http://jsonapi.org/format/#document-top-level
52+ if view and view .action == 'list' :
53+ # Check for paginated results
54+ results = (data ["results" ] if isinstance (data , dict ) else data )
55+
4956 json_api_data = []
5057 for result in results :
5158 result_id = result .pop ('id' , None )
5259 json_api_data .append ({
5360 'type' : resource_name ,
5461 'id' : result_id ,
55- 'attributes' : utils .format_keys (result )})
62+ 'attributes' : utils .format_keys (result ),
63+ 'meta' : utils .convert_resource (result , results , request )
64+ })
5665 else :
5766 result_id = data .pop ('id' , None )
58- json_api_data = {
59- 'type' : resource_name ,
60- 'id' : result_id ,
61- 'attributes' : utils .format_keys (data ),
62- }
67+ json_api_data = {
68+ 'type' : resource_name ,
69+ 'id' : result_id ,
70+ 'attributes' : utils .format_keys (data ),
71+ }
6372
6473 # remove results from the dict
6574 data .pop ('results' , None )
0 commit comments