'Given a request and a list of renderers, return a two-tuple of:
(renderer, media type).'

def select_renderer(self, request, renderers, format_suffix=None):

    format_query_param = self.settings.URL_FORMAT_OVERRIDE
    format = (format_suffix or request.query_params.get(format_query_param))
    if format:
        renderers = self.filter_renderers(renderers, format)
    accepts = self.get_accept_list(request)
    for media_type_set in order_by_precedence(accepts):
        for renderer in renderers:
            for media_type in media_type_set:
                if media_type_matches(renderer.media_type, media_type):
                    media_type_wrapper = _MediaType(media_type)
                    if (_MediaType(renderer.media_type).precedence > media_type_wrapper.precedence):
                        full_media_type = u';'.join(((renderer.media_type,) + tuple((u'{0}={1}'.format(key, value.decode(HTTP_HEADER_ENCODING)) for (key, value) in media_type_wrapper.params.items()))))
                        return (renderer, full_media_type)
                    else:
                        return (renderer, media_type)
    raise exceptions.NotAcceptable(available_renderers=renderers)
