      template = 'rest_framework/schema.js'
  
      def render(self, data, accepted_media_type=None, renderer_context=None):
          codec = coreapi.codecs.CoreJSONCodec()
          schema = base64.b64encode(codec.encode(data))
  
          template = loader.get_template(self.template)
          context = {'schema': mark_safe(schema)}
          request = renderer_context['request']
          return template.render(context, request=request)
 
</s> remove     HTMLFormRenderer, JSONRenderer, StaticHTMLRenderer
 </s> add     HTMLFormRenderer, JSONRenderer, SchemaJSRenderer, StaticHTMLRenderer
        schema = base64.b64encode(codec.encode(data)).decode('ascii')
      template = 'rest_framework/schema.js'
  
      def render(self, data, accepted_media_type=None, renderer_context=None):
          codec = coreapi.codecs.CoreJSONCodec()
        schema = base64.b64encode(codec.encode(data)).decode('ascii')
  
          template = loader.get_template(self.template)
          context = {'schema': mark_safe(schema)}
          request = renderer_context['request']
          return template.render(context, request=request)
keep keep keep keep replace keep keep keep keep keep
 SchemaJSRenderer renders invalid Javascript (#5607)

* SchemaJSRenderer renders invalid Javascript

Under Py3 the base64.b64encode() method returns a binary object, which gets rendered as `b'...'` in schema.js. This results in the output becoming:

    var coreJSON = window.atob('b'eyJf...'');

which is invalid Javascript. Because base64 only uses ASCII characters it is safe to decode('ascii') it. Under Py2 this will result in a unicode object, which is fine. Under Py3 it results in a string, which is also fine. This solves the problem and results in a working schema.js output.

* Add regression test for #5608

* Add regression test for #5608

* Apparently the linter on Travis wants the imports in a different order than on my box... 
rest_framework/renderers.py