I am a little new to DRF (and programming in general), but I have not found a solution to what I am trying to do. I am building an API that allows the user to specify url suffixes with format_suffix_patterns. In particular, JSON, CSV and XML. I have added the renderes for these (in that order) to my DEFAULT_RENDERER_CLASSES.
If I specify the suffix this works perfectly. However I anticipated that by listing the JSONRenderer first that would be the default should no format be specified - but this is not always the case. >From a casual glance it seems the order the renderer is decided is: 1. if specified as a kwarg in the APIView "initial" method 2. if specified as a request parameter in the negotiation "select_renderer" method 3. the request header in the negotiation "select_renderer" method 4. order of renderer ??? I didn't get this far In some request headers "application/xml" is specified (for example if just hitting the API in a chrome browser). Because I have an XmlRenderer this is selected as default. I am wondering what the best way to specify "Use this format" and inject it between #2 and #3. As a pretty ugly way I did this in the negotiation.py/select_renderer: def select_renderer(self, request, renderers, format_suffix=None): """ Given a request and a list of renderers, return a two-tuple of: (renderer, media type). """ # Allow URL style format override. eg. "?format=json format_query_param = self.settings.URL_FORMAT_OVERRIDE format = format_suffix or request.query_params.get(format_query_param) *or settings.DEFAULT_RESPONSE_FORMAT* I imported my settings into the file and specified a format. I would prefer to add this to the REST_FRAMEWORK settings but haven't figure that out yet...and still I think this is bad/hacky solution. Is there something more elegant out there I just haven't found? -- You received this message because you are subscribed to the Google Groups "Django REST framework" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-rest-framework+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.