Realized I still hadn't replied to this - mostly because I'm still not quite sure what's the right thing to do here.
The problem is that rather than send a useful ACCEPT header letting the API know that the browser would like 'text/html' back in the response, IE sends a whole load of basically useless rubbish. If REST framework honor's IE's accept header it'll end up sending back json to the request - at least with the current prioritization it gives the renderers.
I'd assumed that the right way to get around the problem would be to simply ignore accept headers from IE, and honor any other Accept headers, which -it turns out - does exactly the right thing _unless_ you're dealing with an AJAX client in IE, which _is_ sending the correct Accept headers (Saying that it'll accept JSON data), which promptly get ignored by REST framework.
As far as I can see the options are:
1. Respect _all_ accept headers. Re-prioritize the renderers so that html is the default, rather than json. I'm not super keen on this, because I think that json really ought to be the default.
2. Respect _all_ accept headers, and don't re-prioritize the renderers. IE users don't get to see the browsable API, they'll just get back json, but at least AJAX clients in IE will work fine. The browse-able API *can* still be got to using ?format=html.
3. Only respect IE accept headers if the HTTP header "X-Requested-With: XMLHttpRequest" is set - indicating an AJAX request. Should do the trick in most circumstances, but leaves a dodgy corner case for IE if you're using an AJAX client library that doesn't set that header.
4. Use some other kind of header information to determine if the client is IE and non-AJAX.
I guess I'm leaning towards 3. it's probably the least bad option, and I'm fairly sure most ajax libraries are going to be setting that header now,
but still not totally happy with it.