|
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