|
4 | 4 | """ |
5 | 5 | from __future__ import unicode_literals |
6 | 6 | from django.http import Http404 |
7 | | -from rest_framework import exceptions |
| 7 | +from rest_framework import HTTP_HEADER_ENCODING, exceptions |
8 | 8 | from rest_framework.settings import api_settings |
9 | 9 | from rest_framework.utils.mediatypes import order_by_precedence, media_type_matches |
10 | 10 | from rest_framework.utils.mediatypes import _MediaType |
@@ -54,13 +54,19 @@ def select_renderer(self, request, renderers, format_suffix=None): |
54 | 54 | for media_type in media_type_set: |
55 | 55 | if media_type_matches(renderer.media_type, media_type): |
56 | 56 | # Return the most specific media type as accepted. |
| 57 | + media_type_wrapper = _MediaType(media_type) |
57 | 58 | if ( |
58 | 59 | _MediaType(renderer.media_type).precedence > |
59 | | - _MediaType(media_type).precedence |
| 60 | + media_type_wrapper.precedence |
60 | 61 | ): |
61 | 62 | # Eg client requests '*/*' |
62 | 63 | # Accepted media type is 'application/json' |
63 | | - return renderer, renderer.media_type |
| 64 | + full_media_type = ';'.join( |
| 65 | + (renderer.media_type,) + |
| 66 | + tuple('{0}={1}'.format( |
| 67 | + key, value.decode(HTTP_HEADER_ENCODING)) |
| 68 | + for key, value in media_type_wrapper.params.items())) |
| 69 | + return renderer, full_media_type |
64 | 70 | else: |
65 | 71 | # Eg client requests 'application/json; indent=8' |
66 | 72 | # Accepted media type is 'application/json; indent=8' |
|
0 commit comments